Hive group by 分组 和 having 语句

group by 分组

通常会和聚合函数一起使用,按照某个字段内容进行分组,然后每个分组执行聚合操作

原本数据

id  name        money
1    Bob            1200
2    Black        2100
3    BigDataBoy    5600
4    Bob            2300
5    Bob            3200
6    Black        5600

需求:按照 姓名(name) 进行分组,求平均工资(money)

查询语句:

select name,avg(money) from hive_db
group by name;

查询结果

hive> select name,avg(money) from hive_db
    > group by name;
Query ID = root_20200127203058_a0984c91-9ca1-4735-b6a9-ffd5aa2d17a7
...
Total MapReduce CPU Time Spent: 18 seconds 160 msec
OK

BigDataBoy    5600.0
Black    3850.0
Bob    2233.3333333333335

Time taken: 48.392 seconds, Fetched: 3 row(s)

having 语句

having 与 where 语句的异同

  1. where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据。
  2. where后面不能写分组函数,而having后面可以使用分组函数。
  3. having只用于group by分组统计语句。

需求:不同名字(name)的平均工资(money)大于 3000 的

查询语句:

select name,avg(money) avg_money from hive_db
group by name 
having avg_money > 3000;

查询结果:

hive> select name,avg(money) avg_money from hive_db 
    > group by name 
    > having avg_money > 3000;
Query ID = root_20200127204801_68c6a01d-21a3-4355-b3a8-69900f16b857
...
Total MapReduce CPU Time Spent: 16 seconds 10 msec
OK
BigDataBoy    5600.0
Black    3850.0
Time taken: 46.82 seconds, Fetched: 2 row(s)
发表评论 / Comment

用心评论~