本文介绍了聚合函数的关键字使用。
背景说明
聚合函数的使用不支持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)