Oracle分析函数
2014-03-21 21:56
531 查看
最近在工作中遇到一个SQL问题,就是需要在GROUP BY之后,取第一条记录,而不是MAX,MIN,这么简单的筛选。
感谢我的同事lhqmccn,帮我解决这个问题。
我们都知道,MAX,MIN,COUNT,SUM等属于聚合函数,其实Oracle还提供另外一种函数,分析函数。
下面是例子:按CLASS分组后,取VALUE最大的记录所对应的NAME。
主要是这句:MAX(NAME) KEEP(DENSE_RANK FIRST ORDER BY VALUE DESC)
分析函数种类众多,而且功能强大,我只是应用了满足我这个需求的一种,请大家自行Google学习。
P.S. 除了Oracle外,SQL Server和Postgresql也支持分析函数。
感谢我的同事lhqmccn,帮我解决这个问题。
我们都知道,MAX,MIN,COUNT,SUM等属于聚合函数,其实Oracle还提供另外一种函数,分析函数。
下面是例子:按CLASS分组后,取VALUE最大的记录所对应的NAME。
主要是这句:MAX(NAME) KEEP(DENSE_RANK FIRST ORDER BY VALUE DESC)
WITH t AS (SELECT 1 CLASS, 2 VALUE, 'a' NAME FROM dual UNION ALL SELECT 1 CLASS, 1 VALUE, 'b' NAME FROM dual UNION ALL SELECT 1 CLASS, 3 VALUE, 'c' NAME FROM dual UNION ALL SELECT 2 CLASS, 1 VALUE, 'd' NAME FROM dual UNION ALL SELECT 2 CLASS, 2 VALUE, 'e' NAME FROM dual UNION ALL SELECT 2 CLASS, 3 VALUE, 'f' NAME FROM dual) SELECT CLASS,MAX(VALUE),MAX(NAME) KEEP(DENSE_RANK FIRST ORDER BY VALUE DESC) FROM t GROUP BY CLASS;
分析函数种类众多,而且功能强大,我只是应用了满足我这个需求的一种,请大家自行Google学习。
P.S. 除了Oracle外,SQL Server和Postgresql也支持分析函数。
相关文章推荐
- oracle 分析函数的使用
- 常用Oracle分析函数详解
- oracle 分析函数
- Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法(转载)
- 通过ORACLE分析函数过滤重复数据 推荐
- Oracle--分析函数
- Oracle分页(3)-分析函数(分组)
- oracle分析函数Rank, Dense_rank, row_number
- mysql实现oracle 分析函数row_number()over()
- 深入探讨:oracle中row_number() over()分析函数用法
- ORACLE进阶之三:分析函数
- Oracle分析函数用法
- oracle 分析函数
- Oracle分析函数
- oracle 10g函数大全--分析函数
- ORACLE 分析函数
- Oracle 分析函数(Analytic Functions) 说明
- oracle分析函数系列之sum(col1) over(partition by col2 order by col3):实现分组汇总或递增汇总
- ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- Oracle的分析函数