Запрос GROUP BY SQL
- Предыдущая страница SQL sum()
- Следующая страница SQL Having
Функции总计 (например, SUM) часто требуют добавления предложения GROUP BY.
Предложение GROUP BY
Предложение GROUP BY используется для объединения функций总计, для группировки результатов по одному или нескольким столбцам.
Грамматика SQL GROUP BY
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
Пример SQL GROUP BY
У нас есть следующая таблица "Orders":
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
Теперь мы хотим найти общую сумму для каждого клиента (общий заказ).
Мы хотим использовать оператор GROUP BY для объединения клиентов.
Мы используем следующий SQL-запрос:
SELECT Customer, SUM(OrderPrice) FROM Orders GROUP BY Customer
Результаты набора данных будут выглядеть так:
Customer | SUM(OrderPrice) |
---|---|
Bush | 2000 |
Carter | 1700 |
Adams | 2000 |
Это неплохо, не так ли?
Давайте посмотрим, что произойдет, если мы пропустим GROUP BY:
SELECT Customer, SUM(OrderPrice) FROM Orders
Результаты набора данных будут выглядеть так:
Customer | SUM(OrderPrice) |
---|---|
Bush | 5700 |
Carter | 5700 |
Bush | 5700 |
Bush | 5700 |
Adams | 5700 |
Carter | 5700 |
Этот результат не соответствует нашим ожиданиям.
Почему нельзя использовать это SELECT-выражение? Объяснение: вышеуказанное SELECT-выражение указывает на два столбца (Customer и SUM(OrderPrice)). "SUM(OrderPrice)" возвращает один значок (итог "OrderPrice" столбца), а "Customer" возвращает 6 значков (каждый из которых соответствует каждой строке в таблице "Orders"). Таким образом, мы не получаем правильного результата. Однако, как вы уже видели, оператор GROUP BY решает эту проблему.
GROUP BY нескольких столбцов
Мы также можем применить оператор GROUP BY к нескольким столбцам, например:
SELECT Customer, OrderDate, SUM(OrderPrice) FROM Orders GROUP BY Customer, OrderDate
- Предыдущая страница SQL sum()
- Следующая страница SQL Having