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 statementfirst 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 1ORDER BY 1一起,除此之外你也可以像这样使用GROUP BY 1,2,3..当然这对我们很方便,但是你需要注意这个条件,如果有人修改了你的select列,结果可能不是你想要的,而且也不是可视化的