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

Spe*_*cer 181 mysql sql group-by

有人给我发了一个SQL查询,其中的GROUP BY子句包含声明:GROUP BY 1.

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

Yuc*_*uck 210

它意味着按第一列分组,无论它被称为什么.你也可以这样做ORDER BY.

  • 除非绝对必要,否则它永远不应该在生产代码中使用,例如。如果您动态选择列。它很难阅读,当有人修改 select 语句而不修复序数时,它可能会默默地导致灾难性问题。 (5认同)
  • 这个答案不够明确,而且仍然含糊不清,因为不清楚“第一列”指的是什么。表定义或选择顺序。我会更新它。 (2认同)

mr_*_*air 69

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

FROM account
GROUP BY 1;
Run Code Online (Sandbox Code Playgroud)

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

你也可以指定ORDER BY.

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


vol*_*ron 22

除了按字段名称分组外,您还可以按顺序分组,或者按字段定位.

如果您对某些特定内容进行分组,则通常不会对此进行修改,因为表/视图结构可能会发生变化; 另外,它更难阅读(信用:Yuck).但是如果你要返回一组独特的东西,那就没关系了.

  • +1"不要这样做",我补充说,避免它的最好理由是它不可读. (8认同)

Daa*_*rts 10

它将在select子句中按第一个字段分组


小智 5

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

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

这样做的一个风险是,如果您运行“ Select *”,并且由于某种原因您重新创建了具有不同顺序的列的表,它将给出与您预期不同的结果。


小智 5

这意味着 *“按选择子句中的第一列分组”。始终GROUP BY 1与 一起使用ORDER BY 1

您也可以使用GROUP BY 1,2,3... 它很方便,但你需要注意那个条件;如果有人修改了您的选择列并且没有可视化,结果可能不是您想要的。

  • 能否详细说明一下为什么总是将它与 order by 结合使用? (5认同)