IT评测·应用市场-qidao123.com技术社区

标题: MySQL的HAVING到底是干什么的?利用场景是什么?底层原理是什么? [打印本页]

作者: 大连全瓷种植牙齿制作中心    时间: 2025-4-13 18:18
标题: MySQL的HAVING到底是干什么的?利用场景是什么?底层原理是什么?
一、MySQL 的 HAVING 是干什么的?

1. 焦点定义



二、利用场景

1. 常见利用场景



三、底层原理

1. HAVING 的工作机制



2. 具体步骤


四、流程图与概念图

1. 流程图

  1. 开始
  2.   ↓
  3. 解析 SQL 查询
  4.   ↓
  5. 分组数据(GROUP BY)
  6.   ↓
  7. 聚合计算(COUNT/SUM/AVG)
  8.   ↓
  9. 条件筛选(HAVING)
  10.   ↓
  11. 返回结果
  12.   ↓
  13. 结束
复制代码
2. 概念图

  1. +-------------------+
  2. | 数据表            |
  3. +-------------------+
  4.         ↓
  5. +-------------------+
  6. | 分组操作          |
  7. +-------------------+
  8.         ↓
  9. +-------------------+
  10. | 聚合计算          |
  11. +-------------------+
  12.         ↓
  13. +-------------------+
  14. | 条件筛选          |
  15. +-------------------+
  16.         ↓
  17. +-------------------+
  18. | 结果返回          |
  19. +-------------------+
复制代码
3. UML 类图

  1. +-----------------------+
  2. | GroupedQueryHandler   |
  3. +-----------------------+
  4. | + filterWithHaving()  |
  5. +-----------------------+
复制代码
4. 头脑导图

  1. MySQL HAVING
  2. ├── 使用场景
  3. │   ├── 分组统计后筛选
  4. │   ├── 业务分析
  5. │   ├── 异常检测
  6. │   └── 报表生成
  7. ├── 底层原理
  8. │   ├── 分组操作
  9. │   ├── 聚合计算
  10. │   ├── 条件筛选
  11. │   └── 执行计划优化
  12. └── 具体步骤
  13.     ├── 解析查询
  14.     ├── 分组操作
  15.     ├── 聚合计算
  16.     ├── 条件筛选
  17.     └── 返回结果
复制代码

五、具体的完整 MySQL 实例代码

以下是一个完整的 MySQL 示例代码,展示怎样利用 HAVING 举行分组筛选。
1. 创建示例表

  1. -- 创建订单表
  2. CREATE TABLE orders (
  3.     order_id INT PRIMARY KEY AUTO_INCREMENT,
  4.     user_id INT, -- 用户 ID
  5.     amount DECIMAL(10, 2), -- 订单金额
  6.     order_date DATE -- 订单日期
  7. );
  8. -- 插入测试数据
  9. INSERT INTO orders (user_id, amount, order_date) VALUES
  10. (1, 100.00, '2023-10-01'),
  11. (1, 200.00, '2023-10-02'),
  12. (2, 150.00, '2023-10-01'),
  13. (3, 300.00, '2023-10-01'),
  14. (3, 250.00, '2023-10-03'),
  15. (3, 400.00, '2023-10-05');
复制代码
注释


2. 利用 HAVING 查询

  1. -- 查询总订单金额大于 500 的用户
  2. SELECT
  3.     user_id, -- 用户 ID
  4.     SUM(amount) AS total_amount -- 统计总订单金额
  5. FROM
  6.     orders -- 数据来源表
  7. GROUP BY
  8.     user_id -- 按用户 ID 分组
  9. HAVING
  10.     SUM(amount) > 500; -- 筛选总订单金额大于 500 的用户
复制代码
注释


3. 查询结果

假设插入的数据如下:
order_iduser_idamountorder_date11100.002023-10-0121200.002023-10-0232150.002023-10-0143300.002023-10-0153250.002023-10-0363400.002023-10-05 实行查询后,结果如下:
user_idtotal_amount3950.00 注释


六、总结

1. 为什么需要 HAVING?


2. 底层原理总结


3. 留意事项



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4