思路步骤:
先统计该字段每个值出现的次数;
通过ROWNUM或者RANK函数获取出现次数最多的3个值;
SQL:
SELECT COL,T_COUNT可是你这样获取的是最大值的前三个吧? 我需要的是出现次数最多的前三个。
select * from (select * from audit_ErrFailCDRs_monitor order by to_number(RESULTCODE) desc) where rownum <=3
这样得出的是最大的前三个,而我现在想得到RESULTCODE这个字段的值出现最多的前三个
使用排名函数的条件就是按照次数统计的。所以最大值的前三个就 是出现次数最多的前三
本回答被网友采纳好像看不懂耶。
select * from (select * from audit_ErrFailCDRs_monitor order by to_number(RESULTCODE) desc) where rownum <=3; 这个就是我要查询的表,但是我这样只能得到最大值的前三个,而现在想得到的是RESULTCODE这个字段的值出现最多的前三个,求帮助
SELECT
ch.a
FROM
(
SELECT
rownum r,
COUNT(t.RESULTCODE) ct,
t.RESULTCODE a
FROM
audit_ErrFailCDRs_monitor t
GROUP BY
t.RESULTCODE
ORDER BY
ct DESC
) ch
WHERE
ch.r <= 3;
内层语句中用RESULTCODE进行分组,拿到个数COUNT(t.RESULTCODE) ct,并且按个数倒序排序。同时加上rownum r字段得到子表ch。
外层查询拿到前三个,就是出现次数前三的。
我用PL/SQL 运行你的代码。好像不能运行也。
表:audit_ErrFailCDRs_monitor 字段;RESULTCODE
而且好像取别名要用as吧,看你都没有。
大神,求详细解答步骤,我还是个菜鸟哦!
去别名用as | is都可,也可以省略,加个空格然后别名就行。
用RESULTCODE进行分组,
分组后能拿到每组的个数:COUNT(t.RESULTCODE) ct
然后通过个数倒序排序。
然后拿前三个就行。
你说的是SQL吧,为什么我用PL/SQL运行你的代码会报错呢? 你运行后是什么结果?
追答是sql语句,你说的PL/SQL是数据库工具。能运行的。我这里没有你的表结构,所以没有运行
本回答被提问者采纳