目录

  1. 聚合查询简介
  2. 常用聚合函数及语法
  3. 聚合查询示例
  4. GROUP BY 子句详解
  5. HAVING 过滤聚合结果
  6. 联合查询简介(UNION / UNION ALL)
  7. UNION 与 UNION ALL 区别
  8. 联合查询示例
  9. 注意事项与性能优化建议
  10. 总结

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 区别

特点UNIONUNION 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

参考资料


如果需要,我可以帮你写一些复杂的聚合查询和联合查询实战案例,也可以结合性能优化和索引设计讲解,随时告诉我!