SQL子句“GROUP BY 1”是什么意思?

时间:2011-09-12 19:10:53

标签: mysql sql group-by

有人向我发送了一个SQL查询,其中GROUP BY子句包含以下声明:GROUP BY 1

这一定是拼写错误吗?没有列给别名1.这意味着什么?我是否正确地认为这必定是一个错字?

6 个答案:

答案 0 :(得分:182)

它意味着按第一列分组,无论它被调用什么。您可以使用ORDER BY执行相同操作。

答案 1 :(得分:55)

SELECT account_id, open_emp_id
         ^^^^        ^^^^
          1           2

FROM account
GROUP BY 1;

在上面的查询GROUP BY 1中指的是first column in select statement    account_id

您也可以在ORDER BY中指定。

  

注意:ORDER BY和GROUP BY中的数字始终以1开头而不是0开始。

答案 2 :(得分:20)

除了按字段名称分组外,您还可以按表中的序号或字段位置进行分组。 1对应于第一个字段(无论名称如何),2对应于第二个字段,依此类推。

如果您要对特定内容进行分组,这通常是不明智的,因为表/视图结构可能会发生变化。此外,如果您没有记住表字段,可能很难快速理解SQL查询正在执行的操作。

如果要返回一个唯一的集合,或者快速执行临时查找,这是一种很好的简写语法,可以减少输入。如果您打算在某个时候再次运行查询,我建议您更换这些查询以避免将来出现混淆和意外的并发症(由于方案更改)。

答案 3 :(得分:10)

它将在select子句

中按第一个字段分组

答案 4 :(得分:4)

它将按照您在group by子句之后放置的列位置进行分组。

例如,如果您运行' SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1' 它将按SALESMAN_NAME分组。

这样做的一个风险是,如果您运行' Select *'由于某种原因,您使用不同顺序的列重新创建表,它会给您一个与您预期不同的结果。

答案 5 :(得分:3)

这意味着你的select子句中第1列的sql group,我们总是将GROUP BY 1ORDER BY 1一起使用,除此之外你也可以像GROUP BY 1,2,3..这样使用,当然这很方便对我们而言,你需要注意那个条件,如果有人修改你的选择列,结果可能不是你想要的,而且它不可视化