SQL HAVING 子句

2023-02-28 14:52 更新

SQL HAVING 子句


?HAVING? 子句使你能夠指定過濾條件,從而控制查詢結(jié)果中哪些組可以出現(xiàn)在最終結(jié)果里面。

?WHERE ?子句對被選擇的列施加條件,而 ?HAVING ?子句則對 ?GROUP BY? 子句所產(chǎn)生的組施加條件。

語法  

下面可以看到 ?HAVING? 子句在 ?SEL ECT ?查詢中的位置:

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

在 ?SELECT? 查詢中,?HAVING? 子句必須緊隨 ?GROUP BY? 子句,并出現(xiàn)在 ?ORDER BY? 子句(如果有的話)之前。帶有 ?HAVING? 子句的 ?SELECT? 語句的語法如下所示:

SELECT column1, column2   
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

示例


 考慮 ?CUSTOMERS? 表,表中的記錄如下所示:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

 下面是一個有關(guān) ?HAVING? 子句使用的實例,該實例將會篩選出出現(xiàn)次數(shù)大于或等于 2 的所有記錄。

SQL > SELECT ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
GROUP BY age
HAVING COUNT(age) >= 2;

 其執(zhí)行結(jié)果如下所示:

+----+----------+-----+---------+---------+
| ID | NAME     | AGE | ADDRESS | SALARY  |
+----+----------+-----+---------+---------+
|  2 | Khilan   |  25 | Delhi   | 1500.00 |
|  4 | Chaitali |  25 | Mumbai  | 6500.00 |
+----+----------+-----+---------+---------+

SQL HAVING 實例

現(xiàn)在我們想要查找總訪問量大于 200 的網(wǎng)站。

我們使用下面的 SQL 語句:

實例

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log 
INNER JOIN Websites ON access_log.site_id=Websites.id)
 GROUP BY Websites.name
 HAVING SUM(access_log.count) > 200;

執(zhí)行以上 SQL 輸出結(jié)果如下:

22467having1

現(xiàn)在我們想要查找總訪問量大于 200 的網(wǎng)站,并且 alexa 排名小于 200。

我們在 SQL 語句中增加一個普通的 WHERE 子句:

實例

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites 
INNER JOIN access_log 
ON Websites.id=access_log.site_id 
WHERE Websites.alexa < 200 
GROUP BY Websites.name 
HAVING SUM(access_log.count) > 200;

執(zhí)行以上 SQL 輸出結(jié)果如下:



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號