oracle topn用法,Oracle分组函数跟topN查询

Oracle分组函数和topN查询

--COUNT , 如果数据库表的没有数据,count(*)返回的不是 null,而是 0-- Avg,max,min,sum   --可使用 NVL()函数强制分组函数处理空值      select avg(nvl(comm, 0)) from emp;

--不允许在 WHERE  子句中使用分组函数。

select deptno, avg(sal)

from emp

where avg(sal) > 2000;

group by deptno;

--select 字段列表 from 表名 +where 子句  +group by 子句  +having 子句  +order by 子句

select deptno, job, avg(sal)

from emp

where hiredate >= to_date('1981-05-01','yyyy-mm-dd')

group by deptno,job

having avg(sal) > 1200

order by deptno,job;

--TopN查询

select * from emp where rownum=1 or rownum=2;

--1.排序,列出所有记录或前N条记录

select * from (select * from emp order by sal desc)

where rownum <= 5;

--2.排序,列出指定区间的记录

select 字段列表

from   (select 字段列表 from 表名 order by 排序字段)

where rownum>=11 and rownum<=15

毫无疑问,这句查询语句执行后不会有任何结果。

首先rownum是ORACLE在我们查询时自动生成的一个从1开始计数的伪列(就是一个虚假的列,看起来不存在,但是却实实在在存在)

这个伪列的产生机理是这样:当我们进行查询操作时,数据库的记录一条一条拿出,并给词条记录自动生成伪列rownum,这里强调一下:rownum是从1开始计数的。

这里的查询条件有两个:rownum>=11 和rownum<=15,查询出的rownum是从1开始计数的,也就是拿出的记录rownum=1.它满足rownum<=15但是不满足rownum>=11。所以被无情的抛弃了。紧接着再拿出一条数据,结果当然还是被抛弃。

--总结一下其核心思想:就是将伪列rowno想办法实例为一个可操作的固有列,通过这个固有列来达到TOP N分析的第二种实现。

select * from(select rownum myno,a.* from (select * from emp order by sal desc) a) b where myno>=5 and myno<=10;

select * from (select rownum no,e.* from (select * from emp order by sal desc) e where rownum<=10 ) where no>=5;

--以上查询也是分页查询的例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值