2024年6月11日发(作者:)

hive group by having用法举例

Hive是一个基于Hadoop的数据仓库工具,它提供了SQL-like的

查询语言HQL,用于对大规模数据进行处理和分析。在Hive中,group

by和having是两个常用的聚合函数,用于对数据进行分组和筛选。本

文将介绍Hive中group by和having的用法及示例。

一、group by概述

group by用于对数据进行分组,它将数据按照指定的列进行分

组,并计算每个组内的聚合值。group by通常与聚合函数(如sum、

count、avg等)一起使用,以计算每个分组的数据统计信息。

二、having概述

having用于对分组后的结果进行筛选,它根据指定的条件筛选出

符合条件的分组。having通常与group by一起使用,但它并不会改变

数据的分组方式,而是在分组之后对每个分组进行筛选。

三、用法举例

1. 简单的group by用法

假设有一个学生表(Student),包含学生的姓名(name)和年龄

(age)信息。我们可以使用group by对年龄进行分组,并计算每个

年龄段的学生数量:

```sql

SELECT age, COUNT(*) FROM Student GROUP BY age;

```

上述查询将按照年龄对学生进行分组,并统计每个年龄段的学生

数量。

2. 带有聚合函数的group by用法

第 1 页 共 3 页

除了简单的计数,我们还可以使用聚合函数来计算其他统计信

息,如平均年龄:

```sql

SELECT age, AVG(age) FROM Student GROUP BY age;

```

上述查询将按照年龄对学生进行分组,并计算每个年龄段的平均

年龄。

3. 结合使用group by和having

有时候我们需要根据某些条件对分组后的数据进行筛选。例如,

我们想要找到平均年龄大于等于20岁的学生的姓名和数量:

```sql

SELECT name, COUNT(*) FROM Student WHERE age >= 20 GROUP

BY name HAVING COUNT(*) > 5;

```

上述查询首先按照姓名对学生进行分组,并在分组后筛选出符合

条件的分组(即平均年龄大于等于20岁的分组)。然后,HAVING子句

用于筛选出符合条件的分组中的学生数量大于5的记录。

4. 多列组合的group by和having用法

有时我们需要根据多个列对数据进行分组和筛选。例如,我们想

要找到平均年龄大于等于20岁且姓名以“张”开头的学生姓名和数

量:

```sql

SELECT name, COUNT(*) FROM Student WHERE age >= 20 AND

name LIKE '张%' GROUP BY name HAVING COUNT(*) > 5;

第 2 页 共 3 页

```

上述查询首先根据姓名对学生分组,并在分组后筛选出符合条件

的分组(即平均年龄大于等于20岁且姓名以“张”开头的分组)。然

后,HAVING子句用于筛选出符合条件的分组中的学生数量大于5的记

录。

四、总结

本文介绍了Hive中group by和having的用法及示例。通过灵活

运用这两个函数,我们可以对数据进行分组和筛选,以获取所需的数

据统计信息。在实际应用中,我们需要根据具体的数据结构和需求选

择合适的聚合函数和条件来进行数据分析和处理。

第 3 页 共 3 页