當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。