Oracle中分组查询时keep的使用[转][最简][易懂]

for   example:  
   
  15:18:59   SQL>   create   table   t1   (a   int,   b   int);  
   
  表已创建。  
   
  已用时间:     00:   00:   00.15  
  15:18:59   SQL>  
  15:18:59   SQL>   insert   into   t1   values   (1,5);  
   
  已创建   1   行。  
   
  已用时间:     00:   00:   00.16  
  15:18:59   SQL>   insert   into   t1   values   (1,3);  
   
  已创建   1   行。  
   
  已用时间:     00:   00:   00.16  
  15:18:59   SQL>   insert   into   t1   values   (1,4);  
   
  已创建   1   行。  
   
  已用时间:     00:   00:   00.15  
  15:18:59   SQL>   insert   into   t1   values   (2,1);  
   
  已创建   1   行。  
   
  已用时间:     00:   00:   00.16  
  15:18:59   SQL>   insert   into   t1   values   (2,3);  
   
  已创建   1   行。  
   
  已用时间:     00:   00:   00.00  
  15:18:59   SQL>  
  15:18:59   SQL>   SELECT  
  15:18:59       2     max(b)   KEEP   (DENSE_RANK   LAST   ORDER   BY   (a)   desc)   AS   last,  
  15:18:59       3     max(b)   KEEP   (DENSE_RANK   FIRST   ORDER   BY   (a)   desc)   AS   first  
  15:18:59       4     FROM   t1;  
   
              LAST             FIRST  
  ----------   ----------  
                    5                     3  
   
  已用时间:     00:   00:   00.00

SQL含义:  
  选出  
  以字段a分组,最小一组中(LAST   降序)所有记录中b的最大值  
  和  
  以字段a分组,最大一组中(FRIST   降序)所有记录中b的最大值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值