这可能是一个愚蠢的问题,但我真的很困惑。因此,根据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
我的理解是因为它是序数表示法,并且对于SELECT语句通过语法验证,您必须至少选择一列。所以1表示select语句中的第一列,因为它知道你选择了一列。
编辑:
我看到有人说你不能使用序数表示法,如果你使用的是SQL Server,它们是正确的。你可以在MySQL中使用它。
select a,b,c from emp group by 1,2,3
。首先,它将按列a分组,然后按b和c分组。它基于select语句后的列工作。
每个GROUP BY
表达式必须包含至少一个不是外部引用的列。如果1
不是表格中的列,则无法对其进行分组。