SQL:在 GROUP BY 中使用 SELECT 中的别名

Posted

技术标签:

【中文标题】SQL:在 GROUP BY 中使用 SELECT 中的别名【英文标题】:SQL: Using Alias from SELECT in GROUP BY 【发布时间】:2021-07-24 13:09:09 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

FROM WHERE GROUP BY HAVING SELECT ORDER BY

一般来说,感兴趣的领域是列别名,因为表别名只在FROM 子句中定义。

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

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

无论如何,您使用的数据库(例如 Postgres、mysql 或 BigQuery)都允许在 GROUP BY 中使用列别名。

【讨论】:

是否还有另一个我应该注意的范围规则示例? @Oleole 。 . .我不知道你所说的“另一个例子”是什么意思。

以上是关于SQL:在 GROUP BY 中使用 SELECT 中的别名的主要内容,如果未能解决你的问题,请参考以下文章

sql中 group by排序

SQL中group by语句有何作用?

sql中group by 是啥意思啊?请教谢谢

sql语句中的group by啥意思

sql语句中的group by要怎么用!!

SQL中Group By的使用