数据库准备
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还提供了一些统计函数,如AVG()计算平均值,SUM()求和,COUNT()统计数量,MIN()和MAX()找出最小值和最大值。这些统计函数在数据分析和报表生成中发挥着关键作用。 在数据库管理工具方面,Oracle SQL ...
在描述中提到的场景中,有几种不同的方法可以实现数据统计,包括通过程序处理、使用临时表和包、标准SQL的UNION以及Oracle特有的分析函数。每种方法都有其优缺点。例如,程序处理方法与数据库无关,但增加了开发工作...
- 对于数据挖掘和机器学习任务,分析函数可以帮助进行特征工程,如计算移动平均、标准差等统计特征。 总之,Oracle分析函数是SQL开发中的强大武器,能够处理复杂的数据分析需求,提高查询效率,尤其是在大数据量的...
3. **移动统计函数**: - `AVG()`: 计算指定窗口内的平均值,如示例中的`c_mavg`。 - `SUM()`: 窗口内的总和。 - `MIN()`, `MAX()`: 窗口内的最小值和最大值。 - `LEAD()`, `LAG()`: 提取当前行之后或之前的值。...
学习并熟练掌握这些函数,能极大地提升在Oracle数据库中的工作效率,对于初学者来说,这份“Oracle日常函数文档”无疑是一份极好的参考资料,能够帮助快速理解和运用各种函数,从而更好地进行数据管理和分析工作。
Oracle数据库作为一个强大的关系型数据库管理系统,提供了多种高级操作函数来支持复杂的数据处理。以下是从标题、描述和部分内容中提取的Oracle高级操作函数的知识点。 ### 分支判断函数 #### DECODE函数 DECODE...
Oracle 分析函数是一种强大的SQL工具,它允许你在处理数据时执行复杂的分析操作,而不像聚合...参考书籍如Tom Kyte的《Expert One-on-One》和Oracle 9i SQL Reference等,都是深入学习和理解Oracle分析函数的宝贵资源。
通过本文的学习,我们了解了Oracle中的分析函数及其基本用法,包括常见的分析函数分类、基本语法以及实际应用场景。这些函数的强大之处在于它们能够轻松地处理复杂的数据计算需求,为数据分析提供了极大的便利。掌握...
"函数整理.doc"和"ORACLE函数大全.doc"这两个文档应该包含了Oracle函数的详细说明、示例和应用场景,是学习和查阅Oracle函数的宝贵资料。通过深入学习这些函数,开发者可以更高效地编写SQL查询,优化数据库操作,...
在学习和应用这些函数时,一定要注意函数的参数类型、返回值类型以及可能产生的异常情况。同时,Oracle数据库还支持自定义函数,以满足更复杂的数据处理需求。通过不断地实践和探索,你可以更深入地理解和掌握Oracle...
这个“ORACLE函数大全”资源将详细介绍每个函数的语法、参数、返回值和使用示例,是学习和工作中不可或缺的工具。通过深入研究,你可以提高对Oracle数据库操作的理解和应用能力,提升开发和维护数据库的效率。记得...
Oracle 10G函数大全的文档通常会详细涵盖以上及更多功能,通过学习和熟练掌握这些函数,可以极大地提高你在Oracle数据库管理、查询和开发中的效率。对于数据库管理员和开发者来说,这份资料无疑是一份宝贵的资源。
2. **COUNT()**:统计函数,用于计算指定列的行数。如果无参数,将计算整个结果集的行数。 3. **MAX()** 和 **MIN()**:分别用于找出指定列的最大值和最小值。这些函数在数据分析和报表生成中非常有用。 4. **SUM...
这里,我们主要探讨的是它们的函数用法,通过提供的文档资源——"MySQL_5.1_zh.chm" 和 "oracle函数大全(分类显示).chm",我们可以深入了解这两个数据库系统的函数功能和应用场景。 首先,MySQL 是一款开源、免费的...
在学习和应用Oracle函数时,建议结合实际场景进行练习,理解每个函数的用法和返回值类型,同时注意函数间的相互配合,以解决更复杂的查询需求。通过阅读《oracle+110个常用函数.doc》这样的文档,可以系统地学习和...
其次,Oracle数据字典是数据库自身维护的一系列系统表和视图,用于存储关于数据库对象、权限、统计信息等元数据。通过查询数据字典,我们可以获取到关于表、索引、用户、角色等的详细信息。例如,`DBA_OBJECTS`视图...
8. **性能优化**:了解如何使用 Explain Plan 分析查询执行计划,学习SQL优化器的工作原理,以及如何通过索引、分区、统计信息等方式提升查询性能。 9. **数据库设计**:学习关系数据库设计的基本原则,如范式理论...
Oracle分析函数是数据库管理系统...通过阅读“oracle分析函数.doc”和“oracle_10g分析函数最终版.pdf”这两个文档,你可以深入学习更多关于Oracle分析函数的用法和实例,进一步提升你在数据库管理领域的专业技能。
4. **聚合函数**:COUNT()计算行数,SUM()求和,AVG()计算平均值,MAX()和MIN()找出最大和最小值,这些函数常用于统计分析。 5. **Oracle特定函数**:Oracle数据库提供了许多特有的函数,如DECODE()用于条件判断,...