1

如果查询同时具有 group by 和 order by 子句,SQL 的执行顺序是什么。这是否取决于他们在查询中的位置???

4

8 回答 8

6

ORDER BY总是在由 执行的分组的结果上执行GROUP BY,即总是在“之后”。在标准 SQL 中,如果两者都存在,您必须在ORDER BY词法上使用 afterGROUP BY来“提醒您”这一事实。

于 2009-09-21T14:27:48.077 回答
4

为了:

FROM & JOIN确定和过滤行
WHERE行上的更多过滤器
GROUP BY将这些行组合成组
HAVING过滤器组
ORDER BY排列剩余的行/组

于 2009-09-21T15:35:22.647 回答
1

执行顺序不受任何 SQL 语句的强制。强制要求结果与“规范”评估获得的结果相匹配。在规范评估中,最后应用 ORDER BY(即使在评估 SELECT 列表表达式之后),但这并不意味着在实际系统上实际执行查询时排序会推迟到该点。

于 2009-09-21T15:46:07.903 回答
1

这取决于很多事情,包括您使用的 RDMS。找出正在发生的事情的最佳方法是使用查询工具,该工具允许您查看查询执行计划。

于 2009-09-21T14:28:31.437 回答
1

排序通常发生在最后。

如果您使用的是 SQL Server,则启动查询分析器和执行计划将为您提供一个很好的查询图形表示。

于 2009-09-21T14:30:14.353 回答
0

group by 首先执行,然后对组的结果进行排序。

于 2009-09-21T14:27:47.497 回答
0

假设我们有 SQL 查询:

SELECT   ...
  FROM     ...
  WHERE    ...
  GROUP BY ...
  HAVING   ...
  ORDER BY ...

SQL 查询子句的执行顺序为:

 1. FROM clause
 2. WHERE clause
 3. GROUP BY clause
 4. HAVING clause
 5. SELECT clause
 6. ORDER BY clause
于 2015-06-02T04:10:03.990 回答
0

我还将建议对特定的数据库引擎使用查询分析器。以下是 Postgres 中的一个示例,它解释了先执行 ORDER BY,然后执行 WHERE 过滤器:

EXPLAIN
SELECT * FROM table WHERE id=x AND date<='yyyy-mm-dd' ORDER BY date DESC;

因此,如果我将 DESC 更改为 ASC,结果集将包含不同的记录!

于 2016-02-01T14:48:11.703 回答