美文网首页
用一条SQL查询Top5与其它的总和

用一条SQL查询Top5与其它的总和

作者: 杀小贼 | 来源:发表于2017-07-06 19:41 被阅读0次

    比如表

    name count
    A 10
    B 5
    C 20
    D 60
    E 80
    F 2
    G 7
    H 3

    共8条记录

    name保证唯一

    现在要查询count的TOP5,以及剩下3条的总和:

    name count
    E 80
    D 60
    C 20
    A 10
    G 7

    其它 10

    MySQL

    select * from (select * from 比如表 order bycountdesc limit 5) t union all select '其它',sum(count) from 比如表 where name not in (select name from 比如表 order bycountdesc limit 5)

    Oracle 不支持 TOP 关键字:不过这个好像并不十分严重,因为它提供了 rownum 这个隐式游标,可以实现与 TOP 类似的功能,如:
    SELECT TOP 10 ... FROM WHERE ...
    要写成
    SELECT ... FROM ... WHERE ... AND rownum <= 10

    oracle分页

    -- 不能对ROWNUM使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值),否则无结果
    -- 所以直接用只能从1开始
    -- rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。
    select * from student where rownum>=1;

    --如果想要用rownum不从1开始,需按下面方法使用
    select a1.* from (select student.*,rownum rn from student) a1 where rn >5;

    --分页查询一
    select * from (select a1.*,rownum rn from (select * from student) a1 where rownum <=5) where rn>=2;

    --分页查询二
    select a1.* from (select student.*,rownum rn from student where rownum <=5) a1 where rn >=3;

    --分页查询三
    select a1.* from (select student.*,rownum rn from student) a1 where rn between 3 and 5;

    相关文章

      网友评论

          本文标题:用一条SQL查询Top5与其它的总和

          本文链接:https://www.haomeiwen.com/subject/cskkhxtx.html