Інколи потрібно отримати агрегатні значення (мінімум, максимум, середнє арифметичне тощо) не по всьому результуючому НД, а лише по кожній із груп записів, що входять в цей результуючий НД. Кожна група записів характеризується однаковим значенням якогось стовпчика.
Наприклад, задача:
вивести загальну кількість відпущеного товару по кожному товару.
- потрібно обчислювати суму кількостей відпуску товарів і групувати по назві товару.
Для цього в оператор SELECT після секції WHERE добавляється секція GROUP BY (якщо є секція ORDER BY, то секція GROUP BY записується після секції WHERE, але перед секція ORDER BY)
Якщо є секціяGROUP BY, то обов’язково потрібно, щоб один із стовпчиків результуючої таблиці представлявся агрегатною функцією!
- тобто, щоб в секцію SELECT входив вираз, що містить агрегатну функцію.
Групування відбувається по не - агрегатним полям, отже для групування (тобто, для обчислення агрегатної функції не по всім рядкам таблиці, а лише по групам) – потрібно, щоб у секцію SELECT входило, по крайній мірі, одне не - агрегатне поле (групування здійснюється по одиноким значенням у цьому не - агрегатному стовпчику).
Всі не - агрегатні поля секції SELECT повинні бути вказані в секції GROUP BY!
синтаксична діаграма оператора SELECT:
ASC – в порядку зростання (по замовчуванню)
DESC – в порядку спадання.
Це лише та частина, яку ми вже вивчили. Повна синтаксична діаграма – приблизно вдвічі громіздкіша.
Приклади:
# Вивести загальну кількість відпусків по кожному із товарів: