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

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


当前回答

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

其他回答

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

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

这意味着*“在你的选择子句的第一列分组”。总是使用GROUP BY 1和ORDER BY 1。

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

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。

它将根据放在group by子句后的列位置进行分组。

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

这样做的一个风险是,如果你运行“Select *”,出于某种原因,你以不同的列顺序重新创建表,它会给你一个不同的结果。