SQL子句“GROUP BY 1”是什么意思?
有人向我发送了一个SQL查询,其中GROUP BY
子句由以下语句组成: GROUP BY 1
。
这肯定是一个错字吗? 没有列给别名1.这是什么意思? 我是否有权假定这是一个错字?
这意味着不pipe被称为什么,都按第一列进行分组。 你可以用ORDER BY
做同样的事情。
SELECT account_id, open_emp_id ^^^^ ^^^^ 1 2 FROM account GROUP BY 1;
在上面的查询中, GROUP BY 1
引用了first column in select statement
的first column in select statement
,即account_id
。
你也可以在ORDER BY
指定。
Note : The number in ORDER BY and GROUP BY always start with 1 not with 0.
除了按字段名称分组外,还可以按序号分组,也可以按字段分组。
如果你在特定的事物上进行分组,那么这通常是不受欢迎的,因为表/视图结构可能会改变。 另外,阅读起来也比较困难(信用: Yuck )。 但是,如果你正在返回一组独特的东西,那就没问题。
它将按select子句中的第一个字段进行分组
它将按照您在group by子句之后放置的列位置进行分组。
例如,如果您运行“ SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1
”,它将按SALESMAN_NAME
分组。
这样做的一个风险就是如果你运行“ Select *
”,出于某种原因,你用不同的顺序重新创build列表,它会给你一个不同的结果。
这意味着你的SELECT子句中的第1列的SQL组,我们总是使用这个GROUP BY 1
和ORDER BY 1
一起,除此之外你也可以像这样使用GROUP BY 1,2,3..
当然这对我们很方便,但是你需要注意这个条件,如果有人修改了你的select列,结果可能不是你想要的,而且也不是可视化的