有人向我发送了一个SQL查询,其中GROUP BY
子句包含以下声明:GROUP BY 1
。
这一定是拼写错误吗?没有列给别名1.这意味着什么?我是否正确地认为这必定是一个错字?
答案 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 1
与ORDER BY 1
一起使用,除此之外你也可以像GROUP BY 1,2,3..
这样使用,当然这很方便对我们而言,你需要注意那个条件,如果有人修改你的选择列,结果可能不是你想要的,而且它不可视化