group by ,grouping sets ,cube ,rollup区别

8 篇文章 0 订阅
5 篇文章 0 订阅


数据准备

创建表

create table if not exists cookies(
     cookieid     string,
     cookie_day   string,
     cookie_month  string,
     cookie_status  bigint
)comment 'group测试'
PARTITIONED BY (ds string) lifecycle 1000;

数据

insert into cookies PARTITION(ds = '20210401')
values ('10001','2021-2-12','2021-2','1'),
       ('10002','2021-2-12','2021-2','2'),

       ('10003','2021-2-13','2021-2','1'),
       ('10004','2021-2-13','2021-2','2'),
       ('10005','2021-2-13','2021-2','3'),

       ('10006','2021-2-14','2021-2','1'),
       ('10007','2021-2-14','2021-2','2'),
       ('10008','2021-2-14','2021-2','3'),
       ('10009','2021-2-14','2021-2','4'),
       ('10010','2021-2-14','2021-2','5'),
       ('10011','2021-2-14','2021-2','6'),
       ('10012','2021-2-14','2021-2','7'),

       ('10013','2021-3-1','2021-3','1'),

       ('10014','2021-3-2','2021-3','1'),
       ('10015','2021-3-2','2021-3','2'),
       ('10016','2021-3-2','2021-3','3'),
       ('10017','2021-3-2','2021-3','4'),
       ('10018','2021-3-2','2021-3','5'),
       ('10019','2021-3-2','2021-3','6'),

       ('10020','2021-3-3','2021-3','1'),
       ('10021','2021-3-3','2021-3','2'),
       ('10022','2021-3-3','2021-3','3'),

       ('10020','2021-3-4','2021-3','1'),
       ('10021','2021-3-4','2021-3','2'),
       ('10022','2021-3-4','2021-3','3'),
       ('10023','2021-3-4','2021-3','4'),
       ('10024','2021-3-4','2021-3','5'),

       ('10025','2021-4-5','2021-4','1'),
       ('10026','2021-4-5','2021-4','2'),
       ('10027','2021-4-5','2021-4','3'),
       ('10028','2021-4-5','2021-4','4'),
       ('10029','2021-4-5','2021-4','5'),
       ('10030','2021-4-5','2021-4','6'),
       ('10031','2021-4-5','2021-4','7'),
       ('10032','2021-4-5','2021-4','8'),
       ('10033','2021-4-5','2021-4','9');


alter table daole_cookies_log drop partition (ds='20210401');

select * from daole_cookies_log;

(1)group by

select cookie_month,cookie_date,count(cookie_id) as total
  from cookies
 where ds = '20210401'
 group by cookie_month,cookie_date

结果:
在这里插入图片描述

(2)grouping sets

在一个GROUP BY查询中,根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UNION ALL。

group by A,B,C
grouping sets (A,B,C)

  • (A)
  • (B)
  • (C)

group by A,B,
grouping sets (A,B,(A,B))

  • (A)
  • (B)
  • (A)(B)

例如:

select
       cookie_month,
       cookie_date,
       count(cookie_id) as uv
 from cookies
group by cookie_month,cookie_date
grouping sets (cookie_month,cookie_date)

在这里插入图片描述

等价于:

SELECT cookie_month,NULL,COUNT(cookie_id) AS uv 
  FROM cookies
 GROUP BY cookie_month
 UNION ALL
SELECT NULL,cookie_date,COUNT(cookie_id) AS uv 
  FROM cookies
 GROUP BY cookie_date

在这里插入图片描述

再比如:

 select cookie_month,cookie_date,count(cookie_id) as total
  from cookies
 where ds = '20210401'
 group by cookie_month,cookie_date
 grouping sets (cookie_month,
                cookie_date,
                (cookie_month,cookie_date)
                );

在这里插入图片描述

等价于:

SELECT cookie_month,NULL,COUNT(cookie_id) AS uv 
  FROM cookies GROUP BY cookie_month
 UNION ALL
SELECT NULL,cookie_date,COUNT(cookieid) AS uv
  FROM cookies GROUP BY cookie_date
UNION ALL
SELECT cookie_month,cookie_date,COUNT(cookieid) AS uv
  FROM cookies GROUP BY cookie_month,cookie_date

(3)cube

group by A,B,C with cube

  • (A、B、C)进行group by
  • (A) 进行group by
  • (B) 进行group by
  • (C) 进行group by
  • (A)(B)进行group by
  • (A)(C)进行group by
  • (B)(C)进行group by
  • 全表sum
 select cookie_month,cookie_date,count(cookie_id) as total
  from cookies
 where ds = '20210401'
 group by cookie_month,cookie_date
 with CUBE ;

在这里插入图片描述

(4)rollup

rollup 是根据维度在数据结果集中进行的聚合操作。

group by A,B,C with rollup

首先会对(A、B、C)进行group by,然后对(A、B)进行group by,然后是(A)进行group by,最后对全表进行group by操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值