只是对 SQL 语法感到好奇。所以如果我有
SELECT itemName as ItemName, substring(itemName, 1,1) as FirstLetter, Count(itemName) FROM table1 GROUP BY itemName, FirstLetter
这是不正确的,因为
GROUP BY itemName, FirstLetter
真的应该
GROUP BY itemName, substring(itemName, 1,1)
但是为什么我们不能为了方便而简单地使用前者呢?
SQL 的实现就像按以下顺序执行查询一样:
对于大多数关系数据库系统,此顺序解释了哪些名称(列或别名)是有效的,因为它们必须在前面的步骤中引入。
因此,在 Oracle 和 SQL Server 中,不能在 SELECT 子句中定义的 GROUP BY 子句中使用术语,因为 GROUP BY 在 SELECT 子句之前执行。
但也有例外:MySQL 和 Postgres 似乎有额外的智能允许它。