您的位置:首页 > 数据库 > Oracle

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)

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也支持分析函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: