`
stone02111
  • 浏览: 212428 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oracle统计函数学习

 
阅读更多

数据库准备

CREATE TABLE emp (
  deptno int NOT NULL,
  ename varchar(100) DEFAULT NULL,
  sal int DEFAULT NULL
);

insert into emp values (10,'KING',5000);
insert into emp values (10,'CLARK',2450);
insert into emp values (10,'MILLER',1300);
insert into emp values (20,'SCOTT',3000);
insert into emp values (20,'FORD',3000);
insert into emp values (20,'JONES',2975);
insert into emp values (20,'ADAMS',1100);
insert into emp values (20,'SMITH',800);
insert into emp values (30,'BLAKE',2850);
insert into emp values (30,'ALLEN',1600);
insert into emp values (30,'TURNER',1500);
insert into emp values (30,'WARD',1250);
insert into emp values (30,'MARTIN',1250);
insert into emp values (30,'JAMES',950);

 

1.row_number() 的使用

 

原表信息:

select deptno, ename, sal from emp order by deptno, sal desc;

 

   	DEPTNO	ENAME	SAL
1	10	KING	5000
2	10	CLARK	2450
3	10	MILLER	1300
4	20	SCOTT	3000
5	20	FORD	3000
6	20	JONES	2975
7	20	ADAMS	1100
8	20	SMITH	800
9	30	BLAKE	2850
10	30	ALLEN	1600
11	30	TURNER	1500
12	30	WARD	1250
13	30	MARTIN	1250
14	30	JAMES	950

 使用row_number()查出各部门薪水最高的三个员工姓名、薪水,多于三个的只取三个。

   	DEPTNO	RW	ENAME	SAL
1	10	1	KING	5000
2	10	2	CLARK	2450
3	10	3	MILLER	1300
4	20	1	SCOTT	3000
5	20	2	FORD	3000
6	20	3	JONES	2975
7	30	1	BLAKE	2850
8	30	2	ALLEN	1600
9	30	3	TURNER	1500

 体会:row_number() 返回的主要是“行”的信息,并没有按照sal排名,如

        20          1 SCOTT            3000
                    2 FORD             3000
scott与ford薪水一样多,ford前面的2仅仅是行数、记录条数的念。

 

2.rank()、dense_rank() 的使用

 

使用rank()查出各部门薪水前三名的员工姓名、薪水。

 

 select *
   from (select deptno,
                rank() over(partition by deptno order by sal desc) rk,
                ename,
                sal
           from emp)
  where rk <= 3

 

   	DEPTNO	RK	ENAME	SAL
1	10	1	KING	5000
2	10	2	CLARK	2450
3	10	3	MILLER	1300
4	20	1	SCOTT	3000
5	20	1	FORD	3000
6	20	3	JONES	2975
7	30	1	BLAKE	2850
8	30	2	ALLEN	1600
9	30	3	TURNER	1500

 

使用dense_rank()查出各部门薪水前三名的员工姓名、薪水。

 

  select *
    from (select deptno,
                 dense_rank() over(partition by deptno order by sal desc) drk,
                 ename,
                 sal
            from emp)
   where drk <= 3

 

 

   	DEPTNO	DRK	ENAME	SAL
1	10	1	KING	5000
2	10	2	CLARK	2450
3	10	3	MILLER	1300
4	20	1	SCOTT	3000
5	20	1	FORD	3000
6	20	2	JONES	2975
7	20	3	ADAMS	1100
8	30	1	BLAKE	2850
9	30	2	ALLEN	1600
10	30	3	TURNER	1500

 Oracle统计函数(一)--Rank和Dense_Rank

分类:Oracle数据库

聚合函数RANK 和 dense_rank 主要的功能是计算一组数值中的排序值。

在9i版本之前,只有分析功能(analytic ),即从一个查询结果中计算每一行的排序值,是基于order_by_clause子句中的value_exprs指定字段的。

其语法为:

RANK ( ) OVER ( [query_partition_clause] order_by_clause )

在9i版本新增加了合计功能(aggregate),即对给定的参数值在设定的排序查询中计算出其排序值。这些参数必须是常数或常值表达式,且必须和ORDER BY子句中的字段个数、位置、类型完全一致。

其语法为:

RANK ( expr [, expr]... ) WITHIN GROUP
( ORDER BY
expr [ DESC | ASC ] [NULLS { FIRST | LAST }]
[, expr [ DESC | ASC ] [NULLS { FIRST | LAST }]]...
)

分享到:
评论

相关推荐

    Oracle分析函数教程

    Oracle分析函数,常见的基本统计函数里面都有,大家可以通过安装Oracle的示例数据库来一步一步跟进学习!

    Oracle之分析函数.pdf

    分析函数是 Oracle 专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计。本文总结了若干分析函数的使用方式,供大家学习参考,有...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

    通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

    通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...

    Oracle 11g SQL和PL SQL从入门到精通〖送源代码〗

    通过学习本书,读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,而且可以掌握SQL语句和PL/SQL的各种基础知识和高级特征(记录...

    Oracle 11g SQL和PL SQL从入门到精通part2 pdf格式电子书 下载(二)

    通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...

    Oracle 11g SQL和PL SQL从入门到精通.part1

    通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...

    oracle数据库笔记

    5.统计函数——列名应指定别名 35 6. Group By分组 36 7.Having子句 36 8.练习:表的查询 36 五. 在SQL *Plus中使用函数 37 1.字符串函数 37 2.数字函数 37 3.日期时间函数 38 4.转换函数 38 第五讲 修改SQL数据与...

    收获不知Oracle

    5.2.2.1 统计条数奋勇夺冠297 5.2.2.2 即席查询一骑绝尘302 5.2.2.3 遭遇更新苦不堪言306 5.2.2.4 重复度低一败涂地309 5.2.2.5 了解结构真相大白311 5.2.3 小心函数索引步步陷阱 315 5.2.3.1 列运算让索引失去作用...

    Oracle开发之窗口函数

    到目前为止,我们所学习的分析函数在计算/统计一段时间内的数据时特别有用,但是假如计算/统计需要随着遍历记录集的每一条记录而进行呢?举些例子来说: ①列出每月的订单总额以及全年的订单总额 ②列出每月的订单...

    Oracle基础学习之子查询

    2,having:子查询会返回单行单列,同时表示要使用统计函数; 3,from:子查询返回多行多列数据(表结构); 4,select:返回单行单列 (一般不使用); 示例详解 where(进行数据行的筛选操作): a:查询出低于公司...

    Oracle 10g 开发与管理

    5.统计函数——列名应指定别名 35 6. Group By分组 36 7.Having子句 36 8.练习:表的查询 36 五. 在SQL *Plus中使用函数 37 1.字符串函数 37 2.数字函数 37 3.日期时间函数 38 4.转换函数 38 第五讲 修改SQL数据与...

    MLDN_oracle课堂笔记(全).pdf

    Oracle数据库实践开发教程,便于初学者学习,培训的好教材,包括数据库安装、简单查询、限定查询与排序显示、单行函数、多表查询、分组统计查询、子查询等。

    SQL 数据分析:销售数据的小计/合计/总计以及数据透视表

    学习过 SQL 的人都知道,使用聚合函数(AVG、SUM、COUNT、MIN/MAX 等)和分组操作(GROUP BY)可以对数据进行基本的统计分析,例如统计公司员工的人数、每个部门的平均月薪等。如果想要回顾这些基础概念,可以参考这...

    2009达内SQL学习笔记

    export ORACLE_HOME=/oracledata/.../bin: 一、注意事项: 大小写不敏感,即不区分大小写。提倡关键字大写,便于阅读和调式。 “!”在SQL环境下执行Unix命令。 SQL语句是由简单的英语单词构成;这些英语单词...

    《SAS开发经典案例解析》杨池然 (1).rar

    《SAS开发经典案例解析》共分12章,主要内容包括SAS概述与整体架构、SAS编程语法基础、数据步基础与案例、过程步基础与案例、函数基础与案例、宏基础与案例、统计分析基础与案例、SAS与关系数据库Oracle交互应用、...

    程序员的SQL金典.rar

     5.5.3 Oracle中的独有函数 第6章 索引与约束  6.1 索引  6.2 约束  6.2.1 非空约束  6.2.2 唯一约束  6.2.3 CHECK约束  6.2.4 主键约束  6.2.5 外键约束 第7章 表连接  7.1 表连接简介  7.2 内连接...

Global site tag (gtag.js) - Google Analytics