`
dushanggaolou
  • 浏览: 171207 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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;
 
--以上查询也是分页查询的例子


 

分享到:
评论

相关推荐

    oracle分组排序统计高级用法

    oracle如何实现分组排序和统计、聚集,如何分组求top N,什么是over分析函数,row_number(),rank(),dense_rank()区别又是什么, 如何找到一条记录的前后值,这份文档写得太好了。

    ORACLE 常用分析函数

    分析函数3(Top/Bottom N、First/Last、NTile);窗口函数;报表函数;分析函数总结;26个分析函数;PLSQL开发笔记和小结;分析函数简述  ROW_NUMBER () OVER([partition_clause] order_by_clause) dense_rank在做排序时...

    oracle高级函数说明

    包含Oracle常用的高级函数,比如取前N名,每个分组的前N名等。 详细介绍Oracle分析函数(OVER、Rank、Dense_rank、row_number、Top/Bottom N、First/Last、NTile) ,窗口函数,报表函数

    Oracle开发之分析函数(Top/Bottom N、First/Last、NTile)

    在前面《Oracle开发之分析函数(Rank、Dense_rank、row_number)》一文中,我们已经知道了如何为一批记录进行全排列、分组排列。假如被排列的数据中含有空值呢? 代码如下:SQL&gt; select region_id, customer_id,  ...

    精通sql结构化查询语句

    6.4.4 使用TOP子句 6.4.5 NULL的判断 6.5 模糊查询 6.5.1 使用LIKE运算符进行查询 6.5.2 使用“_”通配符进行查询 6.5.3 使用“%”通配符进行查询 6.5.4 使用“[]”通配符进行查询 6.5.5 使用“[^]”通配符进行查询...

    C#程序开发范例宝典(第2版).part13

    实例067 利用选择控件实现复杂查询 85 2.6 ListView控件应用 87 实例068 ListView控件间的数据移动 87 实例069 将数据库数据添加到ListView控件 90 实例070 在ListView控件中实现修改功能 91 实例071 在...

    C#程序开发范例宝典(第2版).part08

    实例067 利用选择控件实现复杂查询 85 2.6 ListView控件应用 87 实例068 ListView控件间的数据移动 87 实例069 将数据库数据添加到ListView控件 90 实例070 在ListView控件中实现修改功能 91 实例071 在...

    C#程序开发范例宝典(第2版).part02

    实例067 利用选择控件实现复杂查询 85 2.6 ListView控件应用 87 实例068 ListView控件间的数据移动 87 实例069 将数据库数据添加到ListView控件 90 实例070 在ListView控件中实现修改功能 91 实例071 在...

    C#程序开发范例宝典(第2版).part12

    实例067 利用选择控件实现复杂查询 85 2.6 ListView控件应用 87 实例068 ListView控件间的数据移动 87 实例069 将数据库数据添加到ListView控件 90 实例070 在ListView控件中实现修改功能 91 实例071 在...

    2009达内SQL学习笔记

    函数一般在数据上执行,它给数据的转换和处理提供了方便。不同的DBMS提供的函数不同。 函数可能会带来系统的不可移植性(可移植性:所编写的代码可以在多个系统上运行)。 加入注释是一个使用函数的好习惯。 大多数...

    经典SQL脚本大全

    │ │ 7.2.1 TOP n 实现的通用分页存储过程.sql │ │ 7.2.2 字符串缓存实现的通用分页存储过程.sql │ │ 7.2.3 临时表缓存实现的通用分页存储过程.sql │ │ 7.2.4 使用系统存储过程实现的通用分页存储过程.sql │...

    C#编程经验技巧宝典

    54 &lt;br&gt;0075 用回溯法找出n个自然数中取r个数的全排列 55 &lt;br&gt;0076 约瑟夫环问题 56 &lt;br&gt;0077 猴子选大王 57 &lt;br&gt;0078 如何判断IP是否正确 57 &lt;br&gt;0079 如何将小写金额转换为大写金额 57...

Global site tag (gtag.js) - Google Analytics