目录
- 聚合查询简介
- 常用聚合函数及语法
- 聚合查询示例
- GROUP BY 子句详解
- HAVING 过滤聚合结果
- 联合查询简介(UNION / UNION ALL)
- UNION 与 UNION ALL 区别
- 联合查询示例
- 注意事项与性能优化建议
- 总结
1. 聚合查询简介
聚合查询指的是对多条记录进行统计汇总的查询,常用于计算总数、平均值、最大/最小值等。
2. 常用聚合函数及语法
函数 | 作用 | 备注 |
---|---|---|
COUNT(column) | 统计非NULL的行数 | 可用 COUNT(*) 统计所有行 |
SUM(column) | 求和 | 仅数值类型 |
AVG(column) | 计算平均值 | |
MAX(column) | 最大值 | |
MIN(column) | 最小值 |
3. 聚合查询示例
假设有表 orders
,字段 customer_id
和 amount
。
-- 统计订单总数
SELECT COUNT(*) AS total_orders FROM orders;
-- 计算订单总金额
SELECT SUM(amount) AS total_amount FROM orders;
-- 计算平均订单金额
SELECT AVG(amount) AS avg_amount FROM orders;
-- 查询最大订单金额
SELECT MAX(amount) AS max_amount FROM orders;
-- 查询最小订单金额
SELECT MIN(amount) AS min_amount FROM orders;
4. GROUP BY 子句详解
GROUP BY
用于将数据按指定字段分组,再对每组执行聚合函数。
-- 按客户统计订单总金额
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id;
5. HAVING 过滤聚合结果
HAVING
用于过滤分组后的结果,区别于 WHERE
是作用在聚合后的结果上。
-- 查询订单总金额超过1000的客户
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
HAVING total_amount > 1000;
6. 联合查询简介(UNION / UNION ALL)
联合查询用于合并两个或多个查询结果集,要求字段数和类型匹配。
UNION
:去重合并UNION ALL
:合并所有,包含重复
7. UNION 与 UNION ALL 区别
特点 | UNION | UNION ALL |
---|---|---|
是否去重 | 是 | 否 |
性能 | 较慢(因去重排序开销) | 快 |
使用场景 | 需要唯一结果集 | 允许重复,追求性能时使用 |
8. 联合查询示例
假设有两个表 employees_us
和 employees_uk
,结构相同。
-- 查询美国和英国员工列表(去重)
SELECT name, department FROM employees_us
UNION
SELECT name, department FROM employees_uk;
-- 查询美国和英国员工列表(包含重复)
SELECT name, department FROM employees_us
UNION ALL
SELECT name, department FROM employees_uk;
9. 注意事项与性能优化建议
- 聚合查询注意索引的使用,尤其是分组字段
- 避免在聚合字段使用复杂计算,影响性能
- 使用
UNION ALL
替代UNION
,除非必须去重 - 联合查询字段顺序和数据类型必须匹配
- 对大数据量联合查询,考虑拆分执行或建立中间表
10. 总结
类型 | 关键点 | 典型用法 |
---|---|---|
聚合查询 | 统计、求和、分组与过滤 | GROUP BY + HAVING |
联合查询 | 合并多个结果集 | UNION / UNION ALL |
参考资料
如果需要,我可以帮你写一些复杂的聚合查询和联合查询实战案例,也可以结合性能优化和索引设计讲解,随时告诉我!
发表回复