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

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 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

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

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

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

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

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



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

TA贡献1877条经验 获得超1个赞

您可以始终使用子查询,以便可以使用别名;当然,检查性能(可能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

TA贡献1812条经验 获得超5个赞

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

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

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



查看完整回答
反对 回复 2019-10-14
  • 3 回答
  • 0 关注
  • 1074 浏览
慕课专栏
更多

添加回答

举报

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