有人给我发了一个SQL查询,其中GROUP BY子句由语句组成:GROUP BY 1。
GROUP BY
GROUP BY 1
这一定是打错了,对吧?没有列被赋予别名1。这意味着什么呢?我认为这一定是打错了,对吗?
它的意思是根据结果集的第一列进行分组,不管它叫什么。你可以用ORDER BY做同样的事情。
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 >
first column in select statement
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 SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1
SALESMAN_NAME
这样做的一个风险是,如果你运行'Select *',出于某种原因,你以不同的列顺序重新创建表,它会给你一个不同的结果。
Select *
这意味着在选择子句中按第一列分组。始终使用GROUP BY 1和ORDER BY 1。
ORDER BY 1
你也可以使用GROUP BY 1,2,3..。这很方便,但你需要注意这个条件;如果有人修改了您选择的列,结果可能不是您想要的。
GROUP BY 1,2,3..