SQL操作顺序-使用在SELECT中创建的字段进行GROUP BY

时间:2019-04-14 18:40:22

标签: sql

我很难围绕一个基本概念进行思考。任何帮助表示赞赏! 我从这样的资源中了解到,SQL操作的处理顺序为:

1)来自 2)在哪里 3)分组依据 4)有 5)选择 6)订购 7)限制

但是,当我看下面这个来自DataCamp的查询时,我很困惑。如果SQL在SELECT之前处理GROUP BY,那么如何使用GROUP BY子句在SELECT语句(home_team)中创建的字段?

谢谢!

Cmd+Opt+L

1 个答案:

答案 0 :(得分:2)

您的特定查询具有:

GROUP BY hometeam_id
---------^

这是原始数据中的一列,而不是SELECT中的一列。数据以hometeam_id级别进行汇总。然后在聚合之后 应用CASE表达式。

您的问题假定查询是使用以下语言编写的:

GROUP BY home_team

根据数据库的不同,这可能行不通。

SQL没有“处理顺序”。 SQL引擎将分析查询并开发一个有向无环图(DAG),表示需要对数据执行的操作。

您正在考虑的是SQL中标识符作用域的规则。最大的问题是,SELECT中定义的别名可以在哪里使用。

基本上,没有数据库允许在以下子句中使用列别名:

  • SELECT
  • FROM
  • WHERE

所有数据库在以下子句中都允许使用列别名:

  • ORDER BY

某些数据库在GROUP BYHAVING子句中允许使用列别名。

您的数据库似乎是允许在GROUP BY中使用此数据库的数据库。