为了账号安全,请及时绑定邮箱和手机立即绑定

SQL-在Groupby中使用别名

/ 猿问

SQL-在Groupby中使用别名

POPMUISE 2019-10-13 12:04:05

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)

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


查看完整描述

3 回答

?
米琪卡哇伊

SQL的实现就像按以下顺序执行查询一样:

  1. 从条款
  2. WHERE条款
  3. 按条款分组
  4. 拥有条款
  5. 选择子句
  6. 逐条命令

对于大多数关系数据库系统,此顺序解释哪些名称(列或别名)是有效的,因为它们必须是在前一步中引入的。

因此,在Oracle和SQLServer中,不能使用在SELECT子句中定义的GROUP BY子句中的术语,因为GROUP BY是在SELECT子句之前执行的。

但是也有例外:MySQL和Postgres似乎有更多的智能性来允许它。



查看完整回答
反对 回复 2019-10-14
?
冉冉说

您可以始终使用子查询,以便可以使用别名;当然,检查性能(可能db服务器将运行两者,但不会影响验证):

SELECT ItemName, FirstLetter, COUNT(ItemName)FROM (
    SELECT ItemName, SUBSTRING(ItemName, 1, 1) AS FirstLetter    FROM table1    ) ItemNamesGROUP BY ItemName, FirstLetter


查看完整回答
反对 回复 2019-10-14
?
ABOUTYOU

至少在PostgreSQL中,您可以使用GROUP BY子句中结果集中的列号:

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

当然,如果您正在交互地这样做,并且编辑查询以更改结果中列的数量或顺序,那么这将开始很痛苦。但还是。



查看完整回答
反对 回复 2019-10-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信