SQL GROUP BY 1 2 3 和 SQL 执行顺序
SQL GROUP BY 1 2 3 and SQL Order of Execution
这可能是个愚蠢的问题,但我真的很困惑。所以根据SQL查询执行顺序,GROUP BY
子句会在SELECT
子句之前执行。但是它允许做类似的事情:
SELECT field_1, SUM(field_2) FROM myTable GROUP BY 1
我的困惑是,如果 GROUP BY
子句出现在 SELECT
之前,在我提供的这种情况下,SQL 怎么知道 1
是什么?它与 ORDER BY
子句一起使用,对我来说很有意义,因为 ORDER BY
子句发生在 SELECT
之后。
有人可以帮帮我吗?提前致谢!
https://www.periscopedata.com/blog/sql-query-order-of-operations
每个 GROUP BY
表达式必须至少包含一个不是外部引用的列。如果 1
不是您的 table.
中的列,则不能按 1
分组
我的理解是因为它是 序数表示法 并且要使 SELECT 语句通过语法验证,您必须至少 select 编辑一列。所以 1 表示 select 语句中的第一列,因为它知道您有一个列 selected.
编辑:
我看到有人说您不能使用序号表示法,如果您使用的是 SQL 服务器,他们是对的。不过您可以在 MySQL 中使用它。
select a,b,c from emp group by 1,2,3
。首先它将按列 a 然后按 b 和 c 分组。它基于 select 语句后的列。
这可能是个愚蠢的问题,但我真的很困惑。所以根据SQL查询执行顺序,GROUP BY
子句会在SELECT
子句之前执行。但是它允许做类似的事情:
SELECT field_1, SUM(field_2) FROM myTable GROUP BY 1
我的困惑是,如果 GROUP BY
子句出现在 SELECT
之前,在我提供的这种情况下,SQL 怎么知道 1
是什么?它与 ORDER BY
子句一起使用,对我来说很有意义,因为 ORDER BY
子句发生在 SELECT
之后。
有人可以帮帮我吗?提前致谢!
https://www.periscopedata.com/blog/sql-query-order-of-operations
每个 GROUP BY
表达式必须至少包含一个不是外部引用的列。如果 1
不是您的 table.
1
分组
我的理解是因为它是 序数表示法 并且要使 SELECT 语句通过语法验证,您必须至少 select 编辑一列。所以 1 表示 select 语句中的第一列,因为它知道您有一个列 selected.
编辑:
我看到有人说您不能使用序号表示法,如果您使用的是 SQL 服务器,他们是对的。不过您可以在 MySQL 中使用它。
select a,b,c from emp group by 1,2,3
。首先它将按列 a 然后按 b 和 c 分组。它基于 select 语句后的列。