oracle count最大值,如何取COUNT后最大值

本帖最后由 bell6248 于 2017-3-21 14:44 编辑

很简单, 代码如下:

SQL> with t as

2  (

3    select 'A' PRE02, 'U' CHANNEL from dual

4    union all

5    select 'A' PRE02, 'U' CHANNEL from dual

6    union all

7    select 'A' PRE02, 'U' CHANNEL from dual

8    union all

9    select 'A' PRE02, 'J' CHANNEL from dual

10    union all

11    select 'B' PRE02, 'K' CHANNEL from dual

12    union all

13    select 'B' PRE02, 'K' CHANNEL from dual

14    union all

15    select 'B' PRE02, 'L' CHANNEL from dual

16    union all

17    select 'B' PRE02, 'P' CHANNEL from dual

18    union all

19    select 'C' PRE02, 'Y' CHANNEL from dual

20    union all

21    select 'C' PRE02, 'Y' CHANNEL from dual

22    union all

23    select 'C' PRE02, 'Y' CHANNEL from dual

24    union all

25    select 'C' PRE02, 'T' CHANNEL from dual

26  )

27  select  PRE02,

28          CHANNEL,

29          cnt

30  from

31  (select PRE02,

32          CHANNEL,

33          count(*) cnt,

34          dense_rank() over(partition by PRE02 order by count(*) desc) rn

35     from t

36    group by PRE02,CHANNEL)

37  where rn <= 1;

PRE02 CHANNEL        CNT

----- ------- ----------

A     U                3

B     K                2

C     Y                3

SQL>

如果你非要用max keep(), 方法如下, 但是有个问题, 如果同样的PRE02, CHANNEL最大数量的值超过一个, 那还是要用我前面给的方法

select  PRE02,

min(CHANNEL) keep(dense_rank last order by cnt) CHANNEL,

max(cnt) cnt

from

(select PRE02,

CHANNEL,

count(*) cnt

from t

group by PRE02,CHANNEL)

group by PRE02

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值