Запрос 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