SQL HAVING 子句
HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
SQL HAVING 语法
SQL HAVING 语法
SELECT
column1
,
aggregate_function
(
column2
)
FROM
table_name
GROUP
BY
column1
HAVING
condition
;
参数说明:
-
column1
:要检索的列。 -
aggregate_function(column2)
:一个聚合函数,例如SUM、COUNT、AVG等,应用于column2
的值。 -
table_name
:要从中检索数据的表。 -
GROUP BY column1
:根据column1
列的值对数据进行分组。 -
HAVING condition
:一个条件,用于筛选分组的结果。只有满足条件的分组会包含在结果集中。
演示数据库
在本教程中,我们将使用 yssmx 样本数据库。
下面是选自 "Websites" 表的数据:
+----+--------------+---------------------------+-------+---------+ | id_name _url _alexa_country | +----+--------------+---------------------------+-------+---------+ | 1 _Google _https://www.google.cm/ _1 _USA | | 2 _淘宝 _https://www.taobao.com/ _13 _CN | | 3 _云搜索MX教程 _/ _4689 _CN | | 4 _微博 _http://weibo.com/ _20 _CN | | 5 _Facebook _https://www.facebook.com/_3 _USA | | 7 _stackoverflow_http://stackoverflow.com/_ 0_IND | +----+---------------+---------------------------+-------+---------+
下面是 "access_log" 网站访问记录表的数据:
mysql> SELECT * FROM access_log; +-----+---------+-------+------------+ | aid_site_id_count_date | +-----+---------+-------+------------+ | 1_ 1_ 45_2016-05-10 | | 2_ 3_ 100_2016-05-13 | | 3_ 1_ 230_2016-05-14 | | 4_ 2_ 10_2016-05-14 | | 5_ 5_ 205_2016-05-14 | | 6_ 4_ 13_2016-05-15 | | 7_ 3_ 220_2016-05-15 | | 8_ 5_ 545_2016-05-16 | | 9_ 3_ 201_2016-05-17 | +-----+---------+-------+------------+ 9 rows in set (0.00 sec)
SQL HAVING 实例
现在我们想要查找总访问量大于 200 的网站。
我们使用下面的 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
;
执行以上 SQL 输出结果如下:
现在我们想要查找总访问量大于 200 的网站,并且 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
;
执行以上 SQL 输出结果如下: