首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Hive 入门 Group By 全案例【附代码】

Hive 入门 Group By 全案例【附代码】

作者头像
Lenis
发布2019-12-25 12:35:21
发布2019-12-25 12:35:21
1.3K0
举报
文章被收录于专栏:有关SQL有关SQL

不明就里的读者可以看上一篇:

Hive 的入门级 Group By 全案例

昨晚发文之后,有读者陆陆续续在星球发问了,脚本到底该怎么写?

当然也有星友在第一时间拿出了自己的方案,工工整整,让我好生钦佩。

不废话了,下面是大家想看的具体实现。

环境:

代码语言:javascript
复制
Hive: 2.7.7
Oracle SQL Developer
Cloudera JDBC Driver

案例 - 1 : Group by 的常规化应用

代码语言:javascript
复制
select  schema_id
    ,   type_desc
    ,   count(object_id) as object_count
from tblobj2 
group by schema_id,type_desc

结果:

image

案例 - 2 : Group by 之 Grouping Sets 应用

代码语言:javascript
复制
select  schema_id
    ,   type_desc
    ,   count(object_id) as object_count
from tblobj2 
group by schema_id,type_desc
grouping sets((schema_id,type_desc),schema_id)

结果:

image

代码语言:javascript
复制
select  schema_id
    ,   type_desc
    ,   count(object_id) as object_count
from tblobj2 
group by schema_id,type_desc
grouping sets((schema_id,type_desc),type_desc)

结果:

image

代码语言:javascript
复制
select  schema_id
    ,   type_desc
    ,   count(object_id) as object_count
from tblobj2 
group by schema_id,type_desc
grouping sets((schema_id,type_desc),type_desc,())
order by schema_id ,type_desc

结果:

image

代码语言:javascript
复制
select  schema_id
    ,   type_desc
    ,   count(object_id) as object_count
from tblobj2 
group by schema_id,type_desc
grouping sets(schema_id,type_desc,())
order by schema_id ,type_desc

结果:

image

结论:

grouping sets 的作用就是将选定的分组字段,再分子组进行汇总。

(schema_id,type_desc) 用来指定细分字段组合;

单个字段,比如 schema_id, type_desc 用来指定细分的单个字段;

()用来计算总和,总计等,目标对象是符合条件的所有数据,即相当于没有使用字段做 group by 的聚合计算。

最终将这些 grouping sets 里面指定的细分字段聚合得到的结果联合在一个结果集而展现出来。

案例 - 3 : Group by 之 with cube

代码语言:javascript
复制
select schema_id
    ,   type_desc
    ,   count(object_id) as object_count
from tblobj2 
group by schema_id,type_desc
with cube 
order by schema_id ,type_desc

结果 :

image

相当于是以下 grouping sets 的简化版本

代码语言:javascript
复制
select  schema_id
    ,   type_desc
    ,   count(object_id) as object_count
from tblobj2 
group by schema_id,type_desc
grouping sets((schema_id,type_desc),schema_id,type_desc,())
order by schema_id ,type_desc

案例 - 4 : Group by 之 with rollup

这是一个上卷的操作,唯一一个有方向性的分组聚合操作

代码语言:javascript
复制
select schema_id
    ,   type_desc
    ,   count(object_id) as object_count
from tblobj2 
group by schema_id,type_desc
with rollup 
order by schema_id ,type_desc

image

代码语言:javascript
复制
select schema_id
    ,   type_desc
    ,   count(object_id) as object_count
from tblobj2 
group by type_desc,schema_id
with rollup 
order by schema_id ,type_desc

image

按照分组字段从右到左的上卷汇总,最后汇总所有符合条件的数据到一个结果集。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 有关SQL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档