`
dushanggaolou
  • 浏览: 172970 次
  • 性别: 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分析函数教程

    5. **其他函数**:如`TOP/BottomN`, `First/Last`, `NTILE`等,这些函数提供更高级的分析功能。 #### 四、Oracle分析函数示例 1. **使用`RANK()`函数** ```sql SELECT employee_id, salary, department_id, ...

    oracle分析函数,窗口函数,报表函数

    Oracle 分析函数、窗口函数和报表函数是数据库查询和数据分析中的关键工具,尤其在复杂的OLAP(在线分析处理)系统中发挥着重要作用。在Oracle数据库中,这些功能提供了对大量数据进行高效处理的能力,帮助用户生成...

    oracle分组排序统计高级用法

    #### 二、Oracle分组求Top N的方法 **1. 使用`RANK()`函数** - **基本语法**: `RANK()`函数可以用来计算行在某一组中的排名。它会按照`ORDER BY`子句中的规则对行进行排序,并为每一行分配一个排名。 ```sql ...

    oracle分析函数学习

    - Top N和Bottom N用于选取数据集中的前N条或后N条记录,可以结合RANK或ROW_NUMBER实现。 - First/Last函数可以找到每个分组的第一个或最后一个值,这在处理时间序列数据或追踪变化时非常有用。 - NTILE将结果集...

    oracle分析函数.doc

    Oracle分析函数是数据库管理系统Oracle中的一种高级查询工具,主要用于处理大量数据并进行复杂的统计和分析。它们在OLAP(在线分析处理)系统中尤其重要,因为这类系统常常涉及大规模的数据查询、汇总和复杂的业务...

    ORACLE分析函数.pptx

    综上所述,Oracle分析函数提供了更高效的数据处理方式,尤其是在处理top-n查询、分组计算、排名等问题时。通过合理地使用分析函数并配合索引优化,可以显著提升查询性能,降低系统资源消耗。在实际工作中,理解并...

    oracle分析函数全面解析

    - **Top/Bottom N, First/Last, NTile**: 这些函数用于选取数据集中的前N个或后N个记录,`FIRST/LAST`则用于获取每个分组的第一行或最后一行,`NTILE`将数据分割成N个等大小或近似等大小的部分。 **3. 窗口函数** ...

    ORACLE 常用分析函数

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

    oracle分析函数指南

    Oracle分析函数是数据库查询中的重要工具,主要用于处理复杂的聚合和排序操作,特别是在OLAP(在线分析处理)系统中,它们能够高效地进行数据汇总和分析。分析函数与聚合函数(如SUM, AVG, COUNT等)有所不同,聚合...

    oracle高级函数说明

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

    oracle分析函数

    - 分析函数主要分为以下几类:排名函数(Rank, Dense_Rank, Row_Number)、分组函数(如Percent_Rank, Cume_Dist)、移动平均函数(Moving_Average)、累积和/积函数(Cumulative_Sum, Cumulative_Product)以及...

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

    Oracle分析函数是数据库查询中的重要工具,特别是在处理复杂的分组和排序问题时。在Oracle中,分析函数可以让我们在聚合数据的同时保持原始行的信息,这对于数据挖掘和报表生成非常有用。本文将详细介绍如何使用分析...

    oracle select top的方法

    通过上述介绍,我们可以看出虽然Oracle不支持直接的`SELECT TOP`语法,但通过使用`ROWNUM`和`ROW_NUMBER()`窗口函数可以轻松地实现类似的功能。这两种方法各有优缺点,具体使用哪种取决于实际需求以及性能考量。例如...

    深入浅出oracle分析函数(全)

    Oracle分析函数是数据库查询中的重要工具,主要用于处理复杂的分组和排序问题,尤其在数据分析和报表生成中极为关键。分析函数允许我们在一个数据集上执行计算,并根据预定义的窗口或分区进行操作,而不像聚合函数...

Global site tag (gtag.js) - Google Analytics