oracle rollup分组没有数据时为0_Hive 入门数据分析基础 5

六, 常用优化技巧---主要内容和思路来源:开课吧学习笔记

1, 用 group by 代替 distinct 去重

在数据量大, 重复值多时, 能先使用 group by 去重的, 使用 group by 去重后再计算, 比之后再去重计算效率更高.

例如前面的例题中, 查询 2019 年购买后又退款的用户, 可以这样优化:

select a.user_name
from
(select user_name
from user_trade
where year(dt)=2019
group by user_name) a
join
(select user_name
from user_refund
where year(dt)=2019
group by user_name) b
on a.user_name=b.user_name;

2, 多维度聚合

需要对多个字段进行聚合运算, 一个字段一个字段的写 SQL 计算, 不如使用多维度聚合计算语句: grouping sets, cuberollup.

2.01, 分别查询用性别, 城市, 等级分布:

select sex, city, level,
count(user_id)
from user_info
group by sex, city, level;

上述 sql 查询出来的是同一性别, 不同城市, 不同等级的分布, 而我们需要的结果是三个字段的结果是分开的:

select sex, city, level,
count(user_id)
from user_info
group by sex, city, level
grouping sets (sex, city, level);
sex city level _c3
NULL NULL 1 33
NULL NULL 2 26
NULL NULL 3 30
NULL NULL 4 44
NULL NULL 5 30
NULL NULL 6 32
NULL NULL 7 35
NULL NULL 8 34
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值