oracle 分组排序

直接在你原来的select里面加排序就好了,

select  (case when c.auditscore is not null then
                                  rank() over(partition  by (case when c.auditscore is not null then 1 else 2 end) order by
                                       c.auditscore desc )
                            else
                                         null
                            end )     ranking ,

                              (case
                                 when c.auditscore is not null then
                                  count(*) over(partition  by (case when c.auditscore is not null then 1 else 2 end) )
                                 else
                                null
                               end) count1,
                              (case
                                 when c.auditscore is not null then
                                  avg(c.auditscore) over(partition  by (case when c.auditscore is not null then 1 else 2 end) )
                                 else
                                null
                               end) avg1

from table c

解析:

   rank() over(partition  by (case when c.auditscore is not null then 1 else 2 end) order by c.auditscore desc )

看条件就是了 将auditscore字段分成2组(空和非空),然后分别 rank() over 排序(2组排序),接着再在外面筛选一层,将空的置成null。

补充partition  by deptid,channelid可以多字段分组比如根据部门编号和渠道分组

同理count(*) avg 等都可以用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值