本文介紹了聚合函數的關鍵字使用。
背景說明
聚合函數的使用不支持keep關鍵字,例如:
銷售表:
SQL> select * from criss_sales where dept_id = 'D02' order by sale_date ;
DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT
------- ----------- ---------- -----------
D02 2014/3/6 G00 500
D02 2014/3/6 G01 430
D02 2014/4/8 G02 100
D02 2014/4/27 G01 300
D02 2014/5/2 G03 900
此時有個新需求,希望查看部門 D02 內,銷售記錄時間最早,銷售量最小的記錄。
SQL> select
2 dept_id
3 ,min(sale_cnt)keep ( dense_rank first order by sale_date) min_early_date
4 from criss_sales
5 where dept_id = 'D02'
6 group by dept_id
7 ;
DEPT_ID MIN_EARLY_DATE
------- ----------
D02 430
解決方案
您可以通過改寫SQL來代替keep語法。
示例
canno=> select dept_id,min(sal_cnt) from (select dense_rank() over (partition by dept_id order by sale_date),* from criss_sales where dept_id = 'D02' ) t where dense_rank=1 group by dept_id;
dept_id | min
---------+-----
D02 | 430
(1 row)