当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


MySQL HAVING用法及代码示例


MySQL 的HAVING 子句用于指定涉及聚合函数的条件。它用于 GROUP BY 查询,并指定分组结果的条件。

注意

WHERE 子句指定记录在考虑进行分组之前必须满足的条件,而 HAVING 子句指定在进行分组和聚合之后应应用的条件。

用法

SELECT column_name(s)
FROM table_name
GROUP BY column
HAVING condition
ORDER BY column;

例子

请考虑下表了解学生是否持有驾驶执照:

student_id

full_name

年龄

has_license

1

天空镇

17

0

2

本·戴维斯

19

1

3

特拉维斯·苹果

18

0

4

亚瑟·大卫

16

0

5

本杰明镇

17

1

可以使用此处的代码创建上述示例表。

基本用法

要查找该年龄段只有一名学生的年龄:

SELECT age, COUNT(*)
FROM drivers_license
GROUP BY age
HAVING COUNT(*) = 1;



+------+----------+
| age  | COUNT(*) |
+------+----------+
|   19 |        1 |
|   18 |        1 |
|   16 |        1 |
+------+----------+

请注意,年龄 17 不会返回,因为有两名学生是 17

将 HAVING 与 WHERE 结合使用

要在执行分组之前包含 WHERE 子句以过滤掉具有 full_name='Sky Towner' 的学生:

SELECT age, COUNT(*)
FROM drivers_license
WHERE full_name <> 'Sky Towner'
GROUP BY age
HAVING COUNT(*) = 1;



+------+----------+
| age  | COUNT(*) |
+------+----------+
|   19 |        1 |
|   18 |        1 |
|   16 |        1 |
|   17 |        1 |
+------+----------+

这次我们返回了 4 条记录,因为在执行分组之前 'Sky Towner' 已被 WHERE 子句过滤掉。因此,在聚合/分组的记录中,'Benjamin Town' 是唯一的 17 年份,因此满足 HAVING 子句并返回年龄 17

相关用法


注:本文由纯净天空筛选整理自Arthur Yanagisawa大神的英文原创作品 MySQL | HAVING。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。