例子
请考虑下表了解学生是否持有驾驶执照:
| 
 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。
相关用法
- MySQL HOUR()用法及代码示例
 - MySQL HEX方法用法及代码示例
 - MySQL HEX()用法及代码示例
 - MySQL HOUR方法用法及代码示例
 - MySQL Hour()用法及代码示例
 - MySQL ROUND()用法及代码示例
 - MySQL REPEAT()用法及代码示例
 - MySQL POWER()用法及代码示例
 - MySQL LEAD() and LAG()用法及代码示例
 - MySQL IS_IPV4()用法及代码示例
 - MySQL RADIANS方法用法及代码示例
 - MySQL VARIANCE方法用法及代码示例
 - MySQL WEEK()用法及代码示例
 - MySQL TIME_FORMAT方法用法及代码示例
 - MySQL CURTIME()用法及代码示例
 - MySQL weekofyear()用法及代码示例
 - MySQL Convert()用法及代码示例
 - MySQL IS NOT用法及代码示例
 - MySQL FROM_BASE64()用法及代码示例
 - MySQL LEFT方法用法及代码示例
 - MySQL UCASE方法用法及代码示例
 - MySQL PI()用法及代码示例
 - MySQL CONCAT()用法及代码示例
 - MySQL UPPER方法用法及代码示例
 - MySQL ATAN2方法用法及代码示例
 
注:本文由纯净天空筛选整理自Arthur Yanagisawa大神的英文原创作品 MySQL | HAVING。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
