天天看點

Oracle keep函數講解

keep函數

聚合函數(min/max/sum......) keep(dense_rank first/last order by xxx)
           

應用場景1:

select col1,
          min(col2) keep(dense_rank first order by col3)  as aaa
from xxx 
group by col1;
           

注釋:按表字段col1分組,将分組後的資料按字段col3升序排序,取排序後的首行字段col2,若是排序時出現字段col3字段一樣的情況導緻首行多行并列,則取最小值。

應用場景2:

select a.*,
          min(col2) keep(dense_rank first order by col3) over(partition by col1) as aaa
from xxx a;
           

注釋:表原表資料粒度保持不變,新增字段aaa,按col1字段分組後的資料按字段col3升序排序,取排序後的首行字段col2,若是排序時出現字段col3字段一樣的情況導緻首行多行并列,則取最小值。

注意點:

keep函數是分組排序後取首行/尾行後的聚合;

執行順序為:分組 --> 排序 --> 取值 --> 聚合

執行效果自行驗證,看書百邊不如動手一次!