只是对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)
但为什么我们不能简单地使用前者来方便呢?
发布于 2010-10-02 00:55:06
您可以始终使用子查询,这样您就可以使用别名;当然,请检查性能(可能数据库服务器将同时运行这两个查询,但验证起来不会有什么问题):
SELECT ItemName, FirstLetter, COUNT(ItemName)
FROM (
SELECT ItemName, SUBSTRING(ItemName, 1, 1) AS FirstLetter
FROM table1
) ItemNames
GROUP BY ItemName, FirstLetter
发布于 2010-10-02 00:49:26
至少在PostgreSQL中,您可以在GROUP BY子句的结果集中使用列号:
SELECT
itemName as ItemName,
substring(itemName, 1,1) as FirstLetter,
Count(itemName)
FROM table1
GROUP BY 1, 2
当然,如果您以交互方式执行此操作,并且您编辑查询以更改结果中列的数量或顺序,那么这将是一件痛苦的事情。不过,还是这样。
发布于 2010-10-02 01:10:05
由于处理的逻辑顺序,SQL Server不允许您在GROUP BY子句中引用别名。GROUP BY子句是在SELECT子句之前处理的,因此在计算GROUP BY子句时,别名是未知的。这也解释了为什么可以在ORDER BY子句中使用别名。
这里有一个关于SQL Server logical processing phases的信息来源。
https://stackoverflow.com/questions/3841295
复制相似问题