有一张表(t),字段 a,b,c,d
通过d字段分组统计次数最多的前5个数据
并且显示a,b,c,d全字段。
selct a,b,c,d form t where rownum<=5
selct count(*) as top5 form t group by d order by top5
就是这两语句该怎么整成一个sql语句
我最终想要的是
x 10 我只要1条,以此类推。
a,b,c,d == x(1条)
a,b,c,d == y(1条)
a,b,c,d == z(1条)
a,b,c,d == p(1条)
a,b,c,d == q(1条)
最终只要5条。
哦哦,我的方法是先group分组获得次数最大的5个d,然后在用rank()over()函数,在这5个d内分组排序,取出第一条
select a,b,c,d,rank() over(partition by d order by d desc) as rk
from (
select * from t where d in (
select d from (
select d,count(1) as top5 from t group by d order by count(1)desc
)
where rownum<=5
)
) where rk=1;
由于每组的d的值是相同的,所以你的结果集取决于t表结构的默认a,b,c字段的排序情况
为什么rk 获取不到呢,多谢意见哦。
追答select a,b,c,d,rank() over(partition by d order by a desc) as rk
from (
select * from t where d in (
select d from (
select d,count(1) as top5 from t group by d order by count(1)desc
) t1
where rownum<=5
) t2
) t3
where rk=1;
这样试试,注意,partition by d order by a 的意思是按d分组,按a排序。
oracle sql语句相关问题,分组后查询。
首先,你提的问题有些疑惑,你要d字段统级次数最多的前5个数据,照你这句话,查询出来的结果集应该是大于等于5行数据的.比如 select * from (selct d,count(1) as top5 form t group by d order by top5 desc) a where rownum<=5。查出的结果集可能为:d top5 x 10 y 9 z...
Oracle,SQL语句中对错误提示:不是单组分组函数的
在Oracle和SQL语句中,当执行如下的查询:sql SELECT deptno, MAX(count(*))FROM emp GROUP BY deptno 实际上,这里的 `MAX(count(*))` 实际上是进行了两次分组操作。第一次是对 `deptno` 进行分组,第二次是对每个部门内的所有记录计数。这可能导致误解,因为 `max()` 函数通常用于单个分组结果...
Oracle按部门分组,查询max(avg(sal))结果显示两列,部门编号max(avg(s...
兄弟,你的sql语句有问题,如果你想要显示两列,一个是部门编号,一个是最大的部门平均工资,这样的话,数据只可能有一行两列,你可以这样写:select e.deptno,round(avg(e.sal),2)from emp e group by e.deptno having round(avg(e.sal),2) = (select max(round(avg(e.sal),2))from emp...
oracle sql查询完成分组并只返回每组的最小最大值
楼主把上面语句里的3换成100就行了。
oracle,sql分组问题,求助
你这样根本就无法分组,除非F1每组的“AA”、“BB”值不一样,比如下面这样的数据,则可以按你的要求进行分组。我的实际DB不一样,对比如下:T=a_lmo_temp F1=id1 F2=id2 查询SQL如下:SELECT A1.ID1 AS F1,A1.ID2 AS F2,A2.NUMS AS F3 FROM A_LMO_TEMP A1 INNER JOIN (SELECT ID1...
Oracle,SQL语句中对错误提示:不是单组分组函数的一个疑问
select deptno,max(count(*)) from emp group by deptno 其中max(count(*))相当于2次分组,那么对应的select 中的其他列也需要进行2次分组,比如说:select max(deptno),max(count(*)) from emp group by deptno 原因很简单,sql语言就面向集合的,如果求出来max(count(*)),那么deptno需要对应...
分组查询后再怎样按条件查询
sql多条件分组查询举例:比如有两张表:表一:姓名 分数———李一 2李二 1李三 1张一 3张二 2张三 2……表二:姓——李张王要查询表二中的姓的数据对表一进行分组,然后将分数统计出来。sql语句写法如下:SELECT b. NAME, sum(a.score) AS 分数FROM tb1 aLEFT JOIN tb...
oracle 求sql语句 按照日期范围分组查询。请务必写出测试过的代码,有难...
问了你半天也不答,按startdate的时间为准了 --建表如下 create table test(startdate date,enddate date,autualdate date,"desc" varchar2(10),"value" int)--插入数据 insert into test values (to_date('2013-05-17','yyyy-mm-dd'),to_date('2013-05-17','yyyy-mm-dd'),to_date(...
sql多条件分组查询,求sql语句。
——李 张 王 要查询表二中的姓的数据对表一进行分组,然后将分数统计出来。sql语句写法如下:SELECT b. NAME,sum(a.score) AS 分数 FROM tb1 a LEFT JOIN tb2 b ON SUBSTR(a.name FROM 1 FOR 1)= b.`name`GROUP BY b. NAME;这个是Mysql的写法 Oracle把SubStr函数改一下就可以了。
(oracle)sql根据某一字段分组求和后再列出其他字段信息
acd一样的话,可以select a,c,d,sum(b) from table group by a,c,d;除了ab字段外,取c一条记录 select a,c,sum(b) from where c = '你要的c' table group by a,c;