在本教程中,我们将学习如何使用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 and or_MySQL HAVING子句相关推荐

  1. MySQL学习记录04where条件子句、联表查询、子查询

    文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...

  2. mysql where关键字_MySQL WHERE 子句

    我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是 SQL SELECT 语句使用 ...

  3. mysql union 出错_ORDER BY子句在MySQL中使用UNION时出错(Error with ORDER BY clause using UNION in MySQL)...

    ORDER BY子句在MySQL中使用UNION时出错(Error with ORDER BY clause using UNION in MySQL) 我在MySQL中有以下查询: (SELECT ...

  4. MYSQL多字段分组having子句

    一.多字段分组的意义 group by 子句的分组字段是一个字段列表,即 MySQL 支持按多个字段进行分组.具体的分组策略:分组优先级从左至右,即先按第一个字段进行分组,然后在第一个字段值相同的记录 ...

  5. mysql联合索引与Where子句优化浅析

    问题描述: 把排序.条件等一个一个去除来做测试,结果发现问题就出在排序部分,去除排序时,执行时间由原来的48秒变成0.3x秒. 于是,把涉及排序的字段组成一个联合索引alter table xx ad ...

  6. java aes mysql blob_使用带有ORDER子句的AES_DECRYPT在MySQL中返回BLOB数据

    我正在创建一个系统,用户可以通过PHP使用MySQL数据库存储消息,我使用MySQL AES_ENCRYPT函数来加密这些消息的内容. 这是我的帖子表: CREATE TABLE IF NOT EXI ...

  7. mysql select having_MySQL中SELECT子句WHERE和HAVING的区别

    MySQL中SELECT子句WHERE和HAVING的区别 WHERE子句: 在分组之前使用,表示从所有数据中根据条件筛选出部分数据,以完成分组的要求. 在一个WHERE子句中使用列别名是不允许的,因 ...

  8. 二(1)、MySQL语句优化—优化WHERE子句

    优化SELECT语句 SELECT查询语句执行数据库中所有的查询操作,无论是实现动态网页的亚秒级响应时间,还是缩短时间以生成大量的隔夜报告,调整SELECT语句都是当午之急. 优化查询需要考虑的因素: ...

  9. MySQL 嵌套子查询 with子句 from子查询 in子查询 join子查询

    一.适用场景和方法 (1)适用场景 考虑查询过程中是否存在以下情况: 查询某些数据时需要分组才能得到,某些数据不需要分组就能得到或者分组条件不同: 查询某些数据时需要where条件,某些列不需要whe ...

最新文章

  1. 每日一皮:程序员的生存状态 ...
  2. WINFORM 多条件动态查询 通用代码的设计与实现
  3. leetcode最小路径和 (动态规划)python
  4. 10分钟学习简略五子棋 源码+注释教学
  5. asp.net gridview 模板列 弹出窗口编辑_如何使用极速PDF编辑器的注释工具?
  6. js中变量名提升和函数名提升
  7. 主进程退出后子进程还会存在吗?_[docker]从一个实例,一窥docker进程管理
  8. java代码行数_Java统计代码行数
  9. 2021数据库课程设计培训笔记:【jdbc】部分
  10. 看Spring实战有感(一)
  11. 光学软件国产化项目开发心得
  12. 二极管整流电路工作原理图
  13. 小牛叔讲Python第2章:安装配置Python编程环境
  14. 使用Python实现微信发送文本消息、图片以及附件
  15. 【原创】赋值法写基础解系中解向量
  16. 几种常用的产生负电源的方法
  17. 如何用计算机将图片整成手绘画,【新手教程】如何将手绘作品转变成电子档,并让其更像“作品”?...
  18. Android开发经验谈-很少有人会告诉你的Android开发基本常识,经验谈android
  19. 【调剂】内蒙古农业大学2020年硕士研究生调剂公告(一)
  20. python调试 设置断点

热门文章

  1. Python 如何实现当循环(When)和直到循环(Until)
  2. 人工智能VS方文山:究竟谁能更胜一筹
  3. pdcch加扰_pdcch的功能
  4. Flutter开发百度地图之定位,保姆级教程(2)
  5. 使用echarts画树图,并设置节点为不同的图片
  6. Say Forever
  7. Java语言中一个字符占几个字节?
  8. C# WPF cefsharp网页输入框点击弹出软键盘
  9. ai绘画软件免费的么?如何白嫖ai绘画?
  10. amd处理器matlab,Matlab纯CPU性能测试