zoukankan      html  css  js  c++  java
  • 黑马程序员Oracle分组函数和topN查询

    ---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

     --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。所以被无情的抛弃了。紧接着再拿出一条数据,结果当然还是被抛弃。

    --总结一下其核心思想:就是将伪列rownom想办法实例为一个可操作的固有列,通过这个固有列来达到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;

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

    ---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

  • 相关阅读:
    每位设计师都应该拥有的50个CSS代码片段
    JAVASCRIPT和JQUERY判断浏览器信息总汇
    jQuery Flux Slider 2D/3D 图片切换效果展示
    JavaScript判断是否IE和是否是IE6的方法
    分享一个不错的软件Clover让资源管理器变身浏览器)
    jQuery bgStretcher 背景图片切换效果插件
    Python安装wxPython和ubuntu使用apt提示不能更新
    IBOutlet & retain
    vue同时监听多个参数变化
    ubuntu 命令行chmod修改文件夹权限
  • 原文地址:https://www.cnblogs.com/victorruan/p/2828867.html
Copyright © 2011-2022 走看看