首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL操作顺序-使用在SELECT中创建的字段进行分组

SQL操作顺序-使用在SELECT中创建的字段进行分组
EN

Stack Overflow用户
提问于 2019-04-15 02:40:22
回答 1查看 525关注 0票数 2

我在理解一个相当基本的概念时遇到了麻烦。感谢任何人的帮助!我从这样的资源中了解到,SQL操作的处理顺序是:

1) from 2)其中3) group by 4)具有5)选择6) order by 7) limit

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

谢谢!

代码语言:javascript
复制
-- Identify the home team as Bayern Munich, Schalke 04, or neither
SELECT 
    CASE WHEN hometeam_id = 10189 THEN 'FC Schalke 04'
        WHEN hometeam_id = 9823 THEN 'FC Bayern Munich'
         ELSE 'Other' END AS home_team,
    COUNT(id) AS total_matches
FROM matches_germany
-- Group by the CASE statement alias
GROUP BY home_team;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-15 02:43:56

您的特定查询具有:

代码语言:javascript
复制
GROUP BY hometeam_id
---------^

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

您的问题假设查询是使用以下命令编写的:

代码语言:javascript
复制
GROUP BY home_team

这可能会工作,也可能不会工作,这取决于数据库。

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

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

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

  • SELECT
  • FROM
  • WHERE

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

  • ORDER BY.

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55678736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档