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函數是分組排序後取首行/尾行後的聚合;
執行順序為:分組 --> 排序 --> 取值 --> 聚合
執行效果自行驗證,看書百邊不如動手一次!