← Все вопросы

Чем GROUP BY отличается от ORDER BY в SQL?

Задан 5 месяцев назад1.6к просмотров2 ответа
10

Я новичок и путаю GROUP BY и ORDER BY — оба идут в конце запроса и оба «по столбцу». В чём разница между GROUP BY и ORDER BY? Когда нужен один, а когда другой?

2 ответа

14
✓ Принятый ответ — помог автору

Это совершенно разные вещи, несмотря на похожий синтаксис.

  • ORDER BYсортирует строки (меняет их порядок), но число строк не меняется. Все строки остаются, просто выстраиваются по возрастанию/убыванию.
  • GROUP BYсхлопывает строки в группы по одинаковому значению, уменьшая их количество, чтобы посчитать агрегаты (COUNT, SUM, AVG) по каждой группе.

Сравните на примере таблицы заказов.

ORDER BY — все заказы, отсортированные по сумме:

SELECT customer_id, total
FROM orders
ORDER BY total DESC;

Строк столько же, сколько заказов.

GROUP BY — по одной строке на покупателя с числом его заказов:

SELECT customer_id, COUNT(*) AS cnt
FROM orders
GROUP BY customer_id;

Строк столько, сколько уникальных покупателей.

Их часто используют вместе: сгруппировать, а потом отсортировать группы:

SELECT customer_id, COUNT(*) AS cnt
FROM orders
GROUP BY customer_id
ORDER BY cnt DESC;

Порядок в запросе фиксирован: GROUP BY идёт раньше ORDER BY. Запомнить легко: GROUP BY — про «сколько в каждой группе», ORDER BY — про «в каком порядке показать».

6

Бытовая аналогия. ORDER BY — это расставить книги на полке по алфавиту: книг столько же, поменялся только порядок. GROUP BY — это разложить книги по жанрам и сказать, сколько книг в каждом жанре: вместо сотни книг получаете несколько строк-жанров с числами. Первое не теряет данные, второе — обобщает их.

Ваш ответ

Войдите, чтобы ответить на вопрос.