mysql having and or_MySQL HAVING子句
在本教程中,我们将学习如何使用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子句相关推荐
- MySQL学习记录04where条件子句、联表查询、子查询
文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...
- mysql where关键字_MySQL WHERE 子句
我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是 SQL SELECT 语句使用 ...
- 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 ...
- MYSQL多字段分组having子句
一.多字段分组的意义 group by 子句的分组字段是一个字段列表,即 MySQL 支持按多个字段进行分组.具体的分组策略:分组优先级从左至右,即先按第一个字段进行分组,然后在第一个字段值相同的记录 ...
- mysql联合索引与Where子句优化浅析
问题描述: 把排序.条件等一个一个去除来做测试,结果发现问题就出在排序部分,去除排序时,执行时间由原来的48秒变成0.3x秒. 于是,把涉及排序的字段组成一个联合索引alter table xx ad ...
- java aes mysql blob_使用带有ORDER子句的AES_DECRYPT在MySQL中返回BLOB数据
我正在创建一个系统,用户可以通过PHP使用MySQL数据库存储消息,我使用MySQL AES_ENCRYPT函数来加密这些消息的内容. 这是我的帖子表: CREATE TABLE IF NOT EXI ...
- mysql select having_MySQL中SELECT子句WHERE和HAVING的区别
MySQL中SELECT子句WHERE和HAVING的区别 WHERE子句: 在分组之前使用,表示从所有数据中根据条件筛选出部分数据,以完成分组的要求. 在一个WHERE子句中使用列别名是不允许的,因 ...
- 二(1)、MySQL语句优化—优化WHERE子句
优化SELECT语句 SELECT查询语句执行数据库中所有的查询操作,无论是实现动态网页的亚秒级响应时间,还是缩短时间以生成大量的隔夜报告,调整SELECT语句都是当午之急. 优化查询需要考虑的因素: ...
- MySQL 嵌套子查询 with子句 from子查询 in子查询 join子查询
一.适用场景和方法 (1)适用场景 考虑查询过程中是否存在以下情况: 查询某些数据时需要分组才能得到,某些数据不需要分组就能得到或者分组条件不同: 查询某些数据时需要where条件,某些列不需要whe ...
最新文章
- 每日一皮:程序员的生存状态 ...
- WINFORM 多条件动态查询 通用代码的设计与实现
- leetcode最小路径和 (动态规划)python
- 10分钟学习简略五子棋 源码+注释教学
- asp.net gridview 模板列 弹出窗口编辑_如何使用极速PDF编辑器的注释工具?
- js中变量名提升和函数名提升
- 主进程退出后子进程还会存在吗?_[docker]从一个实例,一窥docker进程管理
- java代码行数_Java统计代码行数
- 2021数据库课程设计培训笔记:【jdbc】部分
- 看Spring实战有感(一)
- 光学软件国产化项目开发心得
- 二极管整流电路工作原理图
- 小牛叔讲Python第2章:安装配置Python编程环境
- 使用Python实现微信发送文本消息、图片以及附件
- 【原创】赋值法写基础解系中解向量
- 几种常用的产生负电源的方法
- 如何用计算机将图片整成手绘画,【新手教程】如何将手绘作品转变成电子档,并让其更像“作品”?...
- Android开发经验谈-很少有人会告诉你的Android开发基本常识,经验谈android
- 【调剂】内蒙古农业大学2020年硕士研究生调剂公告(一)
- python调试 设置断点