MySQL分组过滤

使用HAVING字句对分组结果进行过滤。

示例

有一个表格socre_sheet

mysql> SELECT * FROM score_sheet;
+----+--------+---------+-------+
| id | name   | subject | score |
+----+--------+---------+-------+
|  1 | 张三   | 语文    |    80 |
|  2 | 李四   | 语文    |    90 |
|  3 | 王五   | 语文    |    60 |
|  4 | 王胖子 | 数学    |    59 |
|  5 | 张王五 | 英语    |  59.9 |
|  6 | 吴彦祖 | 英语    |  99.9 |
|  7 | 郭德纲 | 数学    |   100 |
|  8 | 郭敬明 | 数学    |    99 |
|  9 | 郭靖   | 英语    |    70 |
| 10 | 赵四   | 语文    |    61 |
+----+--------+---------+-------+

按科目subject对这个表格进行分组,统计选每个subject的人数:

mysql> SELECT subject, COUNT(subject) AS subject_count FROM score_sheet GROUP BY subject; 
+---------+---------------+
| subject | subject_count |
+---------+---------------+
| 语文    |             4 |
| 数学    |             3 |
| 英语    |             3 |
+---------+---------------+

过滤分组结果,只显示选择人数大于3的subject

mysql> SELECT subject, COUNT(subject) AS subject_count FROM score_sheet GROUP BY subject HAVING subject_count>3;
+---------+---------------+
| subject | subject_count |
+---------+---------------+
| 语文    |             4 |
+---------+---------------+

另外,我们在前面学到,WHERE字句也可以对数据进行过滤。

WHERE和HAVING的不同

WHERE是针对行的过滤。分组时,WHERE先对要查询的数据进行行过滤,然后再对过滤后的数据进行分组。

HAVING对分组结果进行过滤。先分组,再HAVING过滤。

因此,再语法顺序上,WHEREGROUP BY前,而HAVINGGROUP BY后。

综合示例

先过滤socre_sheet中分数不小于60分的记录,再按科目subject对进行分组,统计选每个subject的人数:

mysql> SELECT subject, COUNT(subject) AS subject_count FROM score_sheet WHERE score>=60 GROUP BY subject;
+---------+---------------+
| subject | subject_count |
+---------+---------------+
| 语文    |             4 |
| 英语    |             2 |
| 数学    |             2 |
+---------+---------------+

再对以上结果过滤出subject_count大于3的结果:

mysql> SELECT subject, COUNT(subject) AS subject_count FROM score_sheet WHERE score>=60 GROUP BY subject HAVING subject_count>3;
+---------+---------------+
| subject | subject_count |
+---------+---------------+
| 语文    |             4 |
+---------+---------------+
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这一篇最主要是记录下命令,方便以后查找 使用Mysql 创建数据库 create database mysql_t...
    Treehl阅读 673评论 0 0
  • 本节课我们会涉及到SELECT下的两个字句,分别是GROUP BY 以及 HAVING 上一节我们学习了聚合函数,...
    杜大个阅读 1,455评论 0 1
  • (一)几个数据库相关的概念 1.数据库 数据库: 保存有组织数据的容器。 数据的所有存储、检索、管理和处理实际上是...
    快乐的小飞熊阅读 635评论 0 1
  • 一,DDL 1,创建数据库 CREATE DATABASE 数据库名称;2,删除数据库 DROP DATABASE...
    Khada阅读 508评论 0 0
  • 眼前是生机勃勃的景象 为这绿色的丛林 镶上一丝柔光 渐渐的 屏住呼吸 静静的等待 定一个边框 放在书桌前 一双凝视...
    墨界留白阅读 413评论 0 6

友情链接更多精彩内容