SQL子句“GROUP BY 1”;的意思吗?

有人给我发了一个SQL查询,其中GROUP BY子句由语句组成:GROUP BY 1

这一定是打错了,对吧?没有列被赋予别名1。这意味着什么呢?我认为这一定是打错了,对吗?

193068 次浏览

它的意思是根据结果集的第一列进行分组,不管它叫什么。你可以用ORDER BY做同样的事情。

它将根据选择子句中的第一个字段进行分组

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


FROM account
GROUP BY 1;

在上面的查询中,GROUP BY 1指的是first column in select statement account_id . < / p >

你也可以在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 1ORDER BY 1

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