Sobes.tech
Назад к вопросам
Junior — Middle
53

Как использовать агрегатные функции совместно с оператором GROUP BY для группировки данных?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Нужно уметь объяснить, что GROUP BY разбивает строки на группы по одному или нескольким полям, а агрегатные функции считают итог по каждой группе. Важно знать, что в SELECT вместе с агрегатами можно выводить только поля из GROUP BY или агрегированные значения. Также полезно упомянуть HAVING для фильтрации уже сгруппированных данных.

Определение:

GROUP BY используется в SQL, чтобы объединить строки с одинаковыми значениями в одной или нескольких колонках в группы. После этого к каждой группе можно применить агрегатные функции: COUNT, SUM, AVG, MIN, MAX и другие. Это позволяет получать не отдельные строки, а сводные данные, например количество заказов по пользователю или сумму продаж по категории.

Пример использования:

Допустим, есть таблица orders:

  • customer_id — клиент
  • amount — сумма заказа

Нужно посчитать, сколько заказов сделал каждый клиент, и общую сумму заказов.

SELECT customer_id,
       COUNT(*) AS order_count,
       SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id;

Пояснение кода:

  • GROUP BY customer_id собирает все строки с одинаковым customer_id в одну группу.
  • COUNT(*) считает количество строк в каждой группе, то есть число заказов клиента.
  • SUM(amount) суммирует значение amount внутри каждой группы.
  • AS order_count и AS total_amount задают понятные имена для результирующих колонок.

Если нужно отфильтровать только клиентов, у которых больше 5 заказов, используется HAVING:

SELECT customer_id,
       COUNT(*) AS order_count,
       SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

Здесь HAVING применяется уже после группировки, в отличие от WHERE, который фильтрует строки до группировки.

Ключевые моменты:

  • GROUP BY группирует строки по одному или нескольким полям.
  • Агрегатные функции работают по каждой группе отдельно.
  • Все поля в SELECT должны быть либо в GROUP BY, либо внутри агрегатной функции.
  • WHERE фильтрует строки до группировки, HAVING — группы после группировки.
  • Можно группировать по нескольким колонкам, например GROUP BY country, city.
  • На практике GROUP BY часто используют для отчетов, аналитики и сводных выборок.