0

我对查询过程的顺序感到困惑。我认为订单运行如下:

FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY

但是,我能够使用在 GROUP BY 中的 SELECT 中创建的变量别名。我想知道使用 CASE WHEN 是否有例外但不确定。

这是 SQL 查询和结果

4

1 回答 1

1

您指的是 SQL 的范围规则,而不是执行顺序。这些定义了如何在查询中消除列和表标识符的歧义。一般顺序是:

  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT
  • ORDER BY

通常,感兴趣的领域是列别名,因为表别名仅在FROM子句中定义。

因为只SELECT定义了新的列别名(除了FROM子句中引用的表中的别名),这意味着列表中它上面的子句都不能使用“新”别名。

但是,一些数据库供应商发现这很不方便。特别是,这些数据库通过在GROUP BYand orHAVING子句中允许列别名来“扩展”标准。一些数据库有进一步的限制,因此允许使用别名,但不允许包含别名的表达式。

在任何情况下,您都在使用 Postgres、MySQL 或 BigQuery 等允许在GROUP BY.

于 2021-05-01T13:10:43.313 回答