Hive高级查询(二)

一.Hive聚合运算–group by

  • group by 用于分组
    Hive基本内置聚合函数与group by一起使用
    如果没有指定group by字句,默认聚合整个表
    除聚合函数外,所选的其他列也必须包含在group by中
    group by支持使用case when或表达式
    支持按位编号分组
set hive.groupby.orderby.position.alias=true;

二.聚合函数-having

having:对group by聚合结果的条件过滤

  • 可以避免在group by之后使用子查询
  • having 之后可以使用表达式,不建议

三.Hive聚合运算-基础聚合

1.使用内置聚合函数进行数据聚合

  • max,min,count,sum,avg
  • collect_set,collect_list: 返回每个组列中对象集/列表
  • 与group by 一起使用,可应用于列或者表达式
  • 没有group by则按所有列聚合
  • select 的列必须包含在group by中
  • 对null的聚合为0
    select count(null)=0

四.Hive聚合运算:高级聚合-1

1.group sets

  • 实现对同一数据集进行多重group by操作
  • 本质是多个group by进行union all操作
  • 在这里插入图片描述

五.Hive聚合运算-高级聚合-2

group by with cube|rollup

  • cube:对分组列进行所有可能组合的聚合
  • rollup:计算维度层次级别上的聚合
  • 在这里插入图片描述

六.示例:

素材

1,andy,18
2,lily,20
3,tom,21
4,joke,20
5,david,19
6,nick,20

建表语句

create table student(
id int,
name string,
age int)
row format delimited
fields terminated by ','
lines terminated by '\n';

在这里插入图片描述

(1)

 select count(null) from student;

在这里插入图片描述
(2)

select name,age from student group by age,name having age>18;

在这里插入图片描述
(3)

select id,age,count(name) from student s group by id,age grouping sets(id,age);

分别对id 和age进行分组
在这里插入图片描述
(4)

select id,age,count(name) from student s group by id,age with cube;

在这里插入图片描述
(5)

select id,age,count(name) from student s group by id,age with rollup;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值