Каждый раз, когда мы используем агрегатную функцию в 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 является избыточным?