插件窝 干货文章 数据库查询中,聚合函数和排序到底谁先执行?

数据库查询中,聚合函数和排序到底谁先执行?

顺序 函数 执行 COUNT 221    来源:    2025-03-31

数据库查询中聚合函数和排序的执行顺序

在SQL查询中,聚合函数和排序的执行顺序遵循SQL的逻辑执行顺序,而不是书写顺序。

标准SQL执行顺序

  1. FROM/JOIN - 确定数据来源
  2. WHERE - 过滤行
  3. GROUP BY - 分组
  4. 聚合函数(如SUM,COUNT等) - 计算聚合值
  5. HAVING - 过滤分组
  6. SELECT - 选择列
  7. DISTINCT - 去重
  8. ORDER BY - 排序
  9. LIMIT/OFFSET - 限制结果

关键点

  • 聚合函数先于ORDER BY执行:聚合计算是在分组后进行的,而排序是在所有数据处理完成后才进行的最后一步操作之一。

  • 实际物理执行可能不同:数据库优化器可能会重新排列操作顺序以提高性能,但逻辑结果必须与上述顺序一致。

示例说明

SELECT department, COUNT(*) as emp_count
FROM employees
WHERE salary > 50000
GROUP BY department
HAVING COUNT(*) > 5
ORDER BY emp_count DESC;

在这个查询中: 1. 先过滤出salary>50000的记录 2. 按department分组 3. 计算每组的COUNT() 4. 过滤掉COUNT()≤5的组 5. 最后按emp_count降序排列结果

特殊情况

在窗口函数中,ORDER BY可以影响窗口函数的计算范围,但这是窗口函数特有的行为,不同于查询结果的排序。

理解这个执行顺序对于编写高效、正确的SQL查询非常重要。