猿问

SQL-在Groupby中使用别名

SQL-在Groupby中使用别名

只是好奇SQL语法。所以如果我有

SELECT 
 itemName as ItemName,
 substring(itemName, 1,1) as FirstLetter,
 Count(itemName)FROM table1GROUP BY itemName, FirstLetter

这将是不正确的,因为

GROUP BY itemName, FirstLetter

真的应该

GROUP BY itemName, substring(itemName, 1,1)

但是为什么我们不能为了方便而简单地使用前者呢?


POPMUISE
浏览 1062回答 3
3回答

米琪卡哇伊

SQL的实现就像按以下顺序执行查询一样:从条款WHERE条款按条款分组拥有条款选择子句逐条命令对于大多数关系数据库系统,此顺序解释哪些名称(列或别名)是有效的,因为它们必须是在前一步中引入的。因此,在Oracle和SQLServer中,不能使用在SELECT子句中定义的GROUP BY子句中的术语,因为GROUP BY是在SELECT子句之前执行的。但是也有例外:MySQL和Postgres似乎有更多的智能性来允许它。

冉冉说

您可以始终使用子查询,以便可以使用别名;当然,检查性能(可能db服务器将运行两者,但不会影响验证):SELECT ItemName, FirstLetter, COUNT(ItemName)FROM (     SELECT ItemName, SUBSTRING(ItemName, 1, 1) AS FirstLetter    FROM table1    ) ItemNamesGROUP BY ItemName, FirstLetter

ABOUTYOU

至少在PostgreSQL中,您可以使用GROUP BY子句中结果集中的列号:SELECT   itemName as ItemName,  substring(itemName, 1,1) as FirstLetter,  Count(itemName)FROM table1GROUP BY 1, 2当然,如果您正在交互地这样做,并且编辑查询以更改结果中列的数量或顺序,那么这将开始很痛苦。但还是。
随时随地看视频慕课网APP
我要回答