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