mysql中having的用法是什么

文 / @WordPress主题

MySQL中HAVING的用法是什么?

在MySQL中,如果我们想要筛选出分组后的数据中的某些信息,就需要使用HAVING子句。HAVING子句可以让我们在使用聚合函数进行数据分组后,筛选出符合特定条件的数据。而WHERE子句无法与聚合函数一起使用,因为WHERE子句是在数据分组前进行筛选的。

HAVING子句的语法格式如下:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

其中,HAVING子句的位置位于GROUP BY子句之后,可以使用和WHERE子句相同的操作符和关键字。

接下来,我们使用样本数据库演示MySQL中HAVING的用法。

样本数据库

我们使用RUNOOB样本数据库,在其中的"Websites"表中选择部分数据进行演示。

下面是"Websites"表中的数据:

+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.com/ | 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"的网站访问记录表,其中包含了每个网站的访问量和日期信息。

下面是"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)

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语句中,我们首先使用INNER JOIN操作符将"Websites"表和"access_log"表连接起来。然后,我们使用GROUP BY子句将结果按照"Websites"表的"name"列进行分组,计算出每个网站的访问量之和,并将结果命名为"nums"。最后,在HAVING子句中使用SUM()函数筛选出访问量总和大于200的网站。

执行以上SQL语句,我们得到如下的查询结果:

+--------------+---------------------------+------+
| name | url | nums |
+--------------+---------------------------+------+
| 菜鸟教程 | http://www.runoob.com/ | 551 |
| Facebook | https://www.facebook.com/ | 750 |
| Google | https://www.google.com/ | 45 |
| stackoverflow| http://stackoverflow.com/| 320 |
+--------------+---------------------------+------+

从结果可以看出,四个网站的访问量总和分别为551,750,45和320,其中只有Facebook的访问量总和大于200,符合我们的查询条件。

结论

MySQL中的HAVING子句可以让我们筛选出分组后数据的特定信息。我们可以根据聚合函数的结果,例如SUM()、COUNT()或AVG()函数,来筛选符合特定条件的数据。HAVING子句的语法类似于WHERE子句,但是HAVING子句可以和分组操作一起使用,通过分组计算后的数据进行筛选。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。