我很难围绕一个基本概念进行思考。任何帮助表示赞赏! 我从这样的资源中了解到,SQL操作的处理顺序为:
1)来自 2)在哪里 3)分组依据 4)有 5)选择 6)订购 7)限制
但是,当我看下面这个来自DataCamp的查询时,我很困惑。如果SQL在SELECT之前处理GROUP BY,那么如何使用GROUP BY子句在SELECT语句(home_team)中创建的字段?
谢谢!
Cmd+Opt+L
答案 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 BY
和HAVING
子句中允许使用列别名。
您的数据库似乎是允许在GROUP BY
中使用此数据库的数据库。