本文介紹了聚合函數的關鍵字使用。

背景說明

聚合函數的使用不支持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)