oracle的SQL语句求助 有一张表 有一个字段 里面的值出现的可能有A,B,C,D........Z现在要写一个SQL语句求,整张表里那个字段出现次数最多的前5名比如说 C出现100次 是最多的 那就排第一Y出现99次 是第二多的 那就排第二F出现90次 是第三多的 那就排第三以此类推 要求前5项名这个SQL怎么写呢?紧急求助 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select col1, count(*) from table_name group by col1 order by count(*) desc; 如果只要前 5 的话,加一个 where rownum <= 5 就可以 前5名 怎么体现 是不是有个什么TOP5之类的 不知道加在哪啊?呵呵 group by 和 rownum <= 5 搞定!1楼和2楼已写很清楚了 试试这样 SELECT TOP 5 columnname,count(columnname) AS c FROM table_name GROUP BY columnnameORDER BY c desc select t1 , cnt from (select t1,sum(1) cnt from TABLEgroup by t1order by sum(1)) twhere rownum <= 5 select * from (select col1, count(*) cnt from table_name group by col1 order by count(*) desc) where rownum < 6; 不应该是sum()的,应该是求count 1+2楼的结果就是一张表,在对这张表进行TOP就可以了。简单的蠢方法。个人见解 你这个top是在SQL Server里用的吧。 oracle里没这个用法,oracle中可以用rownum来控制 top 5就相当于rownum <=5. 楼主可以自己尝试下rownum放里面和嵌套在外面的效果有什么区别,自己体会下。再说你这里不能直接order by c的 别名不能直接使用,要使用该别名需要再嵌套一层 他这个rownum必须嵌套在外面如果不嵌套的话,这个group by的话只会对此5条记录进行分组、排序,而并非group by之后的前5名 是的,oracle 里边没有这种用法。 top是在SQL Server里面使用的,ORACLE不是TOP,是用ROWNUM来判断的,ROWNUM是ORACLE自带的属性 select b.* from ( select count(xx) ,rank() over(order by count(xx) desc ) as rk from tab1 t group by t.xx) bwhere b.rk<=5 oracle建立ODBC时老出现“试图执行系统不支持的操作”的问题 表连接的语句 (紧急求助) 关于ORACLE同步的问题 大家来帮我分析一下这个statspack报告 错哪了???提示缺少右括号。。T_T 求两个日期之间的月份数(急) 如何在一个表中按时间顺序查找指定位置的记录 oracle分析函数为何不能在存储过程中使用 求教:ORACLE 能存储的最大数据量 ^_^^_^^_^ 再请高手们帮偶看看 (这个存储过程怎么写 )^_^^_^^_^ 关于oracle的排序 触发器
1楼和2楼已写很清楚了
试试这样 SELECT TOP 5 columnname,count(columnname) AS c FROM table_name
GROUP BY columnname
ORDER BY c desc
select t1,sum(1) cnt from TABLE
group by t1
order by sum(1)
) t
where rownum <= 5
再说你这里不能直接order by c的 别名不能直接使用,要使用该别名需要再嵌套一层
如果不嵌套的话,这个group by的话只会对此5条记录进行分组、排序,而并非group by之后的前5名
select count(xx) ,rank() over(order by count(xx) desc ) as rk from tab1 t group by t.xx) b
where b.rk<=5