分组聚合

2024/5/22 23:02:48

本文主要是介绍分组聚合,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

分组聚合

使用分组可以将数据分为多个逻辑组,然后对每个组进行聚合计算。

创建分组

分组是使用SELECT语句的GROUP BY子句建立的。

Students表:

| id  | class_id | name | gender | score |
| --- | -------- | ---- | ------ | ----- |
| 1   | 1        | 小明 | M      | 90    |
| 2   | 1        | 小红 | F      | 95    |
| 3   | 1        | 小军 | M      | 88    |
| 4   | 1        | 小米 | F      | 73    |
| 5   | 2        | 小白 | F      | 81    |
| 6   | 2        | 小兵 | M      | 55    |
| 7   | 2        | 小林 | M      | 85    |
| 8   | 3        | 小新 | F      | 91    |
| 9   | 3        | 小王 | M      | 89    |
| 10  | 3        | 小丽 | F      | 88    |
SELECT gender,COUNT(*) AS total FROM Students GROUP BY gender;

| gender | total |
| ------ | ----- |
|   M    |   5   |
|   F    |   5   |

上面的SELECT语句指定了两个列:gender和计算字段total。
GROUP BY子句指定了Students表按gender进行分组。
从输出结果中可以看到,系统根据gender将Students表自动分成两个组,然后对每个组执行聚合函数。

过滤分组

如果想排除某些分组,可以通过HAVING子句在数据分组后进行过滤。

SELECT
  class_id,
  FLOOR(AVG(score)) AS score
FROM
  students
GROUP BY
  class_id
HAVING
  FLOOR(AVG(score)) > 80;

| class_id | score |
| -------- | ----- |
|    1     |   91  |
|    3     |   89  |

从输出结果中可以看到,系统按照class_id对Students表进行分组,并计算每个class_id的平均分数,然后使用HAVING子句筛选出平均分数大于80的结果。

HAVING和WHERE

HAVING与WHERE非常类似,唯一的差别是,WHERE过滤行,而HAVING过滤分组。
如果不指定GROUP BY,则大多数数据库其实会同等对待它们,但是在使用HAVING时必须结合GROUP BY子句。
还有另一种理解方法,WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。

分组和排序

在使用GROUP BY子句时,应该也给出ORDER BY子句,这是保证数据正确排序的唯一方法。

SELECT
  class_id,
  FLOOR(AVG(score)) AS score
FROM
  Students
GROUP BY
  class_id
ORDER BY
  score DESC;

| class_id | score |
| -------- | ----- |
|    3     |   89  |
|    1     |   86  |
|    2     |   73  |

SELECT子句顺序

|   子句    |       说明        | 是否必须使用 |
|----------|-----------------|--------------|
|  SELECT  | 要返回的列或表达式 |      是      |
|   FROM   | 从中检索数据的表   | 仅在从表选择数据时使用 |
|  WHERE   |     行级过滤      |      否      |
| GROUP BY |     分组说明      | 仅在按组计算聚合时使用 |
|  HAVING  |     组级过滤      |      否      |
| ORDER BY |   输出排序顺序    |      否      |


这篇关于分组聚合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程