oracle统计sql的使用之grouping_id

一、先看sql示例

select u.group_num,u.area_name,--grouping(u.area_name),
sum(decode(u.bm,'联想 (Lenovo)A396',u.count,0)) aount1,
 sum(decode(u.bm,'中兴 (ZTE)V5s',u.count,0)) aount2
 from
(
select t5.group_num,t50.area_name,t1.brand_name || t1.model_name bm,sum(t1.order_amount) count
from activity_group t5
left join td_m_area_bss t50 on t5.area_code = t50.area_code
left join TI_WEG_CHNL_DETAIL t2 on t2.city_code = t50.user_area_code
left join TI_WEG_ORDER_DETAIL t1 on t1.chnl_id = t2.chnl_id and  t1.brand_name || t1.model_name in ('联想 (Lenovo)A396','中兴 (ZTE)V5s')
where t5.activity_id = '138'
group by t5.group_num,t50.area_name,t1.brand_name,t1.model_name
)u
group by rollup(u.group_num,u.area_name)
having grouping_id(u.group_num,u.area_name)!=1
--having not (area_name is null and group_num is not null)
order by u.group_num

注:

1、grouping_id的数字是怎么确定的?
向量值,可以认为是二进值的数,例:grouping_id(a,b,c),如果列a为空就是0 非空为1,列b和列c也一样,
结果会得到一个三位数,用二进制转换成十进制就是了,例:a,b,c全是非空,说明这行数据是一个总计,那么就是111即7,三列就是7,如果是两列自然是11就是3了。
2、因为Grouping是用来判断当前Column是否是一个合计列,如果是一个合计列,则相应的列会是一个空值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值