1. 程式人生 > >分析函數之keep函數

分析函數之keep函數

art 字段排序 from 函數 分析 保留 概念 min 無法

一、keep函數介紹
-- keep是Oracle下的另一個分析函數,他的用法不同於通過over關鍵字指定的分析函數,可以用於這樣一種場合下:
-- 取同一個分組下以某個字段排序後,對指定字段取最小或最大的那個值。
-- 從這個前提出發,我們可以看到其實這個目標通過一般的row_number分析函數也可以實現,即指定rn=1。但是,
-- 該函數無法實現同時獲取最大和最小值。或者說用first_value和last_value,結合row_number實現,
-- 但是該種方式需要多次使用分析函數,而且還需要套一層SQL。於是出現了keep。

-- 語法:
-- min | max(column1) keep (dense_rank first | last order by column2) over (partion by column3);
-- 最前是聚合函數,可以是min、max、avg、sum。。。 -- column1為要計算的列; -- dense_rank first,dense_rank last為keep 函數的保留屬性,表示分組、排序結果集中第一個、最後一個; -- 解釋:返回按照column3分組後,按照column2排序的結果集中第一個或最後一個最小值或最大值column1。 select deptno, max(sal) keep(dense_rank first order by sal) first_max, max(sal) keep(dense_rank last order
by sal) last_max from emp group by deptno; -- 我們來分析一下,SQL裏面的group by 是作用於聚會函數的,可以這麽理解一下。還有,這裏我們頭腦裏應該有這麽一個概念,排序即分組。

原文鏈接https://lanjingling.github.io/2015/10/09/oracle-fenxihanshu-3/

分析函數之keep函數