select- 数据库,求最小 group ,count,min

问题描述

数据库,求最小 group ,count,min

在Table中,我需要查出那个ID出现的频率最小,
select count(c1) from table where id=1,
select count(c1) from table where id=2
select count(c1) from table where id=3
select count(c1) from table where id=4,
最后查出来的结果理想是
0
1
2
3
不知道有没有好一点的思路,不想在代码里做个傻循环,需要注意的是ID可能为空
即select * from table where id=1有可能无结果集

解决方案

select count(c1) as xx from table group by id order by xx

解决方案二:

忘记补充一句,ID数目是在一定范围的
楼上,注意我想要的结果了么,

解决方案三:

select count(c1) as num from table group by id having id in (1,2,3,4) order by num

解决方案四:

@3楼,不知道你有亲自试过么,如果1在table中不存在呢,再说我想要的是出现次数最少的ID,可能描述有部分错误

解决方案五:

http://bbs.csdn.net/topics/330092271
产生了数字,然后outer join

解决方案六:

select id from(select id,count(c1) as num from table where id in(1,2,3,4) group by id)group by id having num=min(num)

解决方案七:

还是count,group by,having那几个东西,自己多试几次就出来了

解决方案八:

这种查询的话你可以用类似桶排序的办法,你要取Id为1 2 3 4 的出现次数的话,
创建一个长度为4的数组 初始值都为0,a[0]到a[3]分别代表id1234出现的次数。
遍历表,出现id=1的话a[0]+=1…其余的也一样,最后输出数组元素就是相应ID出现的次数了

解决方案九:

select id,count(c1) from table group by id

解决方案十:

你的意思是id范围是固定的集合,比如1、2、3、4、5,在table里可能某个id是不存在的,那么这个id出现的次数就是0,也就是最小的;
如果都出现,那么就是取最小的那个,是这样的意思吧?
假设你的id范围是0,1,2,3,4,5,表里的次数分别是
id,cs
0,8
1,9
3,7
5,8
其中2,4是0次。

select id from (
with t_id as
(select substr(t.ca,instr(t.ca,',',1,c.lv)+1,instr(t.ca,',',1,c.lv+1)-(instr(t.ca,',',1,c.lv)+1)) as id
from (select ',0,1,2,3,4,5,' as ca,length(',0,1,2,3,4,5,')-nvl(length(replace(',0,1,2,3,4,5,',',')),0)-1 as cnt from dual) t,
(select level lv from dual connect by level<=10) c
where c.lv<=t.cnt)
,t_cs as
(select id,sum(cs) cs from tmp_t group by id)
select t_id.id,rank() over (order by nvl(t_cs.cs,0)) rk from t_id,t_cs where t_id.id=t_cs.id(+))
where rk=1

结果是2,4

解释一下:
t_id,是把你的id范围0,1,2,3,4,5,转换成一个6行的临时表;如果你的id范围是从其他表里来的,那么直接select distinct id from id范围表 就可以了
t_cs,是table表里根据id分组统计的出现次数

外链接t_id.id=t_cs.id(+),把数值范围取全,配合nvl(t_cs.cs,0),如果没有出现,次数就=0
rank是排名,次数出现小的排第一,这里有2个数字次数都是0,并列第一,rank都是1,所以都取出来了,如果只要任取一个,把rank改为row_number就可以了

时间: 2024-11-13 22:45:04

select- 数据库,求最小 group ,count,min的相关文章

SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小连续数组中的最大值_mssql2008

其实大家稍微动下大脑,问题可以转化为,是求最小连续数组中的最大值,数组大小可以为1. ======================================================================= 做戏做全套,送佛送到西. 为了便于学习研究,必然是要写全套示例代码的. ------------------------------------------------------------------------------------- --by wls --非专

hdu1394 线段树求最小逆序数

hdu 1394 http://acm.hdu.edu.cn/showproblem.php?pid=1394 用线段树求逆序数,例如要求x的逆序数只需要访问(x+1,n)段有多少个数,就是x的逆序数.还有就是求最小逆序数的时候有个巧妙的想法,当把x放入数组的后面,此时的逆序数应该为x没放入最后面之前的逆序总数加上(n-x)再减去(x-1):sum = sum+(n-x[i])-(x[i]-1). 线段树 #include<cstdio> #include<algorithm> #

mysql数据库分组(GROUP BY)学习笔记

每当查询数据库时,想知道有多少类,或想知道找不相同的有多少种,就用到了分组语句group by 使用方法:  代码如下 复制代码 SELECT * FROM `表名` group by `分组字段` 或带limit做法  代码如下 复制代码 SELECT * FROM `数据表` GROUP BY `分组的字段` LIMIT 0 , 30 例:(查询dedecms(织梦)程序的栏目标题表,以栏目id分组)  代码如下 复制代码 SELECT * FROM `dede_archives` GROU

oracle ibatis map-xml格式的报文如何插入数据库??求大神解答?难道没高手知道问题出在哪儿//???

问题描述 xml格式的报文如何插入数据库??求大神解答?难道没高手知道问题出在哪儿//??? 我将xml格式的一个请求报文赋值给一个变量,然后使用ibatis的map印射给一个字段,其他的字段都能插入进去,但是就这个报文字段插入不了,关键是sql没报错?求大神解答,这个报文在map之前能打印出来

求最小的圆包含指定数量的点的算法

问题描述 求最小的圆包含指定数量的点的算法 2C 给出n个点坐标,并指定一个数m(m<=n),任取其中一个点作为圆心,求一个最小的整数半径,使得这个圆包含m个点(包含哪些点没有要求) 解决方案 http://wenku.baidu.com/link?url=Sq66daNjrZTEkgVO5-SgKDrjTkmayjZaZgZivLObfy_hUeg0stAlqW0grJJgbZyApmCQrd29Hh-6I0LsiLvqbDTAuTlv3KnWcBfmSLo7TEi 解决方案二: 暴力求包含n

c++-数据库求做(论坛提问过):关系模式R(A,B,C,D),函数依赖集

问题描述 数据库求做(论坛提问过):关系模式R(A,B,C,D),函数依赖集 不胜感激 解决方案 想回答来着,不贵低级范式那个记不得了,sorry

sql-html验证数据库 求大神完整代码

问题描述 html验证数据库 求大神完整代码 我写了一个html 想里面有注册信息 里面有用户名 密码 想把文本框的信息获取到sql Sever数据库进行一个insert增加 注册 求大神指教 全部代码

Sql语句求最小可用id_数据库其它

select id from test a where not exists  (          select 1 from test where id=a.id+1  )  order by id  缺点,不从1开始计算.

mysql数据库分组(GROUP BY)查询实例

1.使用松散(Loose)索引扫描实现 GROUP BY 何谓松散索引扫描实现 GROUP BY 呢?实际上就是当 MySQL 完全利用索引扫描来实现 GROUP BY 的时候,并不需要扫描所有满足条件的索引键即可完成操作得出结果. 下面我们通过一个示例来描述松散索引扫描实现 GROUP BY,在示例之前我们需要首先调整一下 group_message 表的索引,将 gmt_create 字段添加到 group_id 和 user_id 字段的索引中:  代码如下 复制代码 1 sky@loca