有人给我发送了一个SQL查询,其中GROUP BY子句由语句组成:GROUP BY 1。
这一定是打错了,对吧?没有列被赋予别名1。这意味着什么呢?我认为这一定是打错了,对吗?
有人给我发送了一个SQL查询,其中GROUP BY子句由语句组成:GROUP BY 1。
这一定是打错了,对吧?没有列被赋予别名1。这意味着什么呢?我认为这一定是打错了,对吗?
SELECT account_id, open_emp_id
^^^^ ^^^^
1 2
FROM account
GROUP BY 1;
在上面的查询中,groupby 1指的是select语句中的第一列 account_id。
你也可以在ORDER BY中指定。
注意:ORDER BY和GROUP BY中的数字总是以1开头,而不是0。
除了按字段名分组外,还可以按序号或字段在表中的位置分组。1对应第一个字段(无论名称如何),2是第二个字段,依此类推。
如果根据特定的东西分组,这通常是不明智的,因为表/视图结构可能会改变。此外,如果您没有记住表字段,可能很难快速理解SQL查询在做什么。
如果要返回唯一的集合,或者快速执行临时查找,这是减少键入的很好的简写语法。如果您计划在某个时候再次运行查询,我建议替换它们以避免未来的混乱和意外的并发症(由于方案更改)。
它将根据放在group by子句后的列位置进行分组。
例如,如果您运行'SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1' 它将根据SALESMAN_NAME进行分组。
这样做的一个风险是,如果你运行“Select *”,出于某种原因,你以不同的列顺序重新创建表,它会给你一个不同的结果。
这意味着*“在你的选择子句的第一列分组”。总是使用GROUP BY 1和ORDER BY 1。
你也可以用GROUP BY 1,2,3…这很方便,但你需要注意这个条件;如果有人修改了您选择的列,结果可能不是您想要的。