MySQL HAVING子句

作者: 易百教程 | 来源:发表于2016-09-14 09:01 被阅读335次

在本教程中,我们将学习如何使用MySQL HAVING子句来指定行分组或聚合的过滤条件。
MySQL HAVING子句

MySQL的HAVING子句在SELECT语句中是用来为某一组行或聚合指定过滤条件。
MySQL的HAVING子句通常与GROUP BY子句一起使用。当它在GROUP BY子句中使用时,我们可以应用它在GROUP BY子句之后来指定过滤的条件。如果省略了GROUP BY子句,HAVING子句行为就像WHERE子句一样。
请注意,HAVING子句应用筛选条件每一个分组的行,而WHERE子句的过滤条件是过滤每个单独的行。
MySQL HAVING子句的示例

让我们来看看使用MySQL HAVING子句的例子。在这里将使用示例数据库(studymysql)中的 order_detail 表作为示范。其表结构如下所示 -

我们可以使用GROUP BY子句来获得订单编号,每个订单销售的产品数量,以及每个订单的总额:
1
2
3
4
5
6
7
SELECT
order_id,
SUM(buy_number)AS buy_count,
SUM(total_money) AS money_count
FROM
studymysql.order_detail
GROUP BY order_id;
执行上面的 SQL 语句后,得到下面的结果 -

现在,要查找那些销售总额超过 1500000 的订单信息。使用MySQL HAVING子句和聚合函数如下:
1
2
3
4
5
6
7
8
SELECT
order_id,
SUM(buy_number)AS items_count,
SUM(total_money) AS sum_total_money
FROM
studymysql.order_detail
GROUP BY order_id
HAVING sum_total_money>1500000;
执行上面的 SQL 语句后,得到下面的结果 -

我们还可以构造并使用逻辑运算符,如在HAVING子句中OR和AND运算符实现更复杂一点的过滤条件。假设要查找 order 表中总销售额大于100000,并且一个订单中包含 6 种以上的产品,参考使用下面的查询:
1
2
3
4
5
6
7
8
SELECT
order_id,
SUM(buy_number) AS items_count,
SUM(total_money) AS total
FROM
studymysql.order_detail
GROUP BY order_id
HAVING total>1000000 AND items_count>350;
执行上面的 SQL 语句后,得到下面的结果 -

假设要查找已发货(status=2)并且总销售额超过 160000 的所有订单,我们可以通过使用INNER JOIN子句将 order 表连接 order_detail 表,并在 status 和 total 列上指定条件,如下查询所示:
1
2
3
4
5
6
7
8
SELECT
od.order_id, SUM(od.total_money) total, o.status
FROM
studymysql.order_detail od
INNER JOIN
studymysql.order o ON od.order_id=o.order_id
GROUP BY od.order_id
HAVING o.status='2' AND total>160000 ;
执行上面的 SQL 语句后,得到下面的结果 -

当我们要通过GROUP BY子句来实现高级的报表输出时,使用HAVING子句就非常有用了。例如,我们可以使用HAVING子句来实现一些类似的查询,如:这个月,本季度和今年累计销售额超过10000 的订单信息。
在本教程中,您已经学会了如何使用MySQL HAVING子句在GROUP BY中来指定记录或聚集组的筛选条件。
相关教程

Using MySQL SELECT Statement to Query Data
MySQL GROUP BY

相关文章

  • MySQL HAVING子句

    在本教程中,我们将学习如何使用MySQL HAVING子句来指定行分组或聚合的过滤条件。MySQL HAVING子...

  • ⑥MYSQL(having子句、order by子句、limit

    mysql.exe -h localhost -P 3306 -u root -puse mydb;—— 进入数据...

  • mysql的查询、子查询及连接查询

    一、mysql查询的五种子句 where(条件查询)、having(筛选)、group by(分组)、order ...

  • 2020-07-15 SQL刷题笔记一

    having 子句 having子句既可包含聚合函数作用的字段也可包括普通的标量字段 having子句必须于gro...

  • MySQL的having子句详解

    示例使用的是MySQL官方数据库sakila having子句一直是我认为比较难以理解的玩意,但是既然用到了就要把...

  • HAVING子句

    有重复的数据行,才有分组并统计的可能性。如果没有重复的数据行,就没有分组的意义。SELECT子句中只能出现分组字段...

  • having子句

    原因:存在HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。 要求: (1)having子句中的...

  • mysql 查询

    mysql的查询、子查询及连接查询 一、mysql查询的五种子句 where(条件查询)、having(筛选)、g...

  • sqlite(17)-Having子句

    Having子句允许指定条件来过滤将出现在最终结果的分组结果。WHERE子句在所选列上设置条件,而Having子句...

  • SQLite Having 子句

    SQLite Having 子句 HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。 WHERE ...

网友评论

    本文标题:MySQL HAVING子句

    本文链接:https://www.haomeiwen.com/subject/lnlvettx.html