MIN
, MAX
, AVG
等),我们必须始终对所有非聚合列进行GROUP BY
,例如:
无论何时我们在SQL中使用聚合函数(MIN
, MAX
, AVG
等),我们必须始终对所有非聚合列进行GROUP BY
,例如:
SELECT storeid, storename, SUM(revenue), COUNT(*)
FROM Sales
GROUP BY storeid, storename
当我们在SELECT语句中使用函数或其他计算时,情况变得更加侵入式,因为这也必须复制到GROUP BY子句中。
SELECT (2 * (x + y)) / z + 1, MyFunction(x, y), SUM(z)
FROM AnotherTable
GROUP BY (2 * (x + y)) / z + 1, MyFunction(x, y)
如果我们要更改SELECT语句,我们必须记得对GROUP BY子句进行相同的更改。
那么GROUP BY子句是多余的吗?
- 如果确实如此,那么为什么SQL中还有GROUP BY子句?
- 如果不是这样,那么GROUP BY能够给我们提供什么额外的功能?