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:一个条件,用于筛选分组的结果。只有满足条件的分组会包含在结果集中。


演示数据库

在本教程中,我们将使用 RUNOOB 样本数据库。

下面是选自 “Websites” 表的数据:

+—-+————–+—————————+——-+———+

| id | name | url | alexa | country |

+—-+————–+—————————+——-+———+

|

1

|

Google

| https://www.google.cm/ | 1 | USA |

|

2

|

淘宝

| https://www.taobao.com/ | 13 | CN |

|

3

|

菜鸟教程

| http://www.runoob.com/ | 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 输出结果如下:


SQL HAVING 子句 | 菜鸟教程
http://wizhiai.github.io/p/36e87fa16c134c76b322cf38d7cd527b/
作者
胡礼节
发布于
2024年1月5日
许可协议