分组聚合
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 | 输出排序顺序 | 否 |
这篇关于分组聚合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?