Условие PostgreSQL GROUP BY

Читать первым в Telegram

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

Введение в условие PostgreSQL GROUP BY

Условие GROUP BY разбивает строки, возвращаемые оператором SELECT, на группы. Для каждой группы можно применить агрегатную функцию, например, SUM() для расчёта суммы элементов или COUNT() для получения количества элементов в группах.

Следующий запрос отображает синтаксис вызова условия GROUP BY:

SELECT column_1, aggregate_function(column_2)
FROM tbl_name
GROUP BY column_1;

Условие GROUP BY ставится сразу после условия FROM или WHERE. После условия GROUP BY следует один столбец или список столбцов, разделённых запятыми. Помимо столбца таблицы вы также можете использовать выражение с условием GROUP BY.

Примеры использования условия PostgreSQL GROUP BY

Для наглядности мы возьмём таблицу payment из примера базы данных.

A) Пример использования условия PostgreSQL GROUP BY без агрегатной функции

Вы можете использовать условие GROUP BY без применения агрегатной функции. Следующий запрос получает данные из таблицы payment и группирует результат по customer_id.

SELECT
    customer_id
FROM
    payment
GROUP BY
    customer_id;

В данном случае условие GROUP BY выступает в роли условия DISTINCT, которое убирает повторяющиеся строки из набора результатов.

B) Пример использования условия PostgreSQL GROUP BY с агрегатной функцией SUM()

Условие GROUP BY полезно в тех случаях, когда оно используется вместе с агрегатной функцией. Например, чтобы узнать, сколько было выплачено клиенту — используйте условие GROUP BY, чтобы разбить таблицу payments на группы; в каждой из которых вычисляется общая сумма денег при помощи функции SUM(), как показано в следующем запросе:

SELECT
    customer_id,
    SUM (amount)
FROM
    payment
GROUP BY
    customer_id;

Условие GROUP BY сортирует набор результатов по customer_id и суммирует количество денег, принадлежащих одному и тому же клиенту. Всякий раз, когда customer_id изменяется, в возвращаемый набор результатов добавляется новая строка.

Вы можете использовать условие ORDER BY с условием GROUP BY, чтобы сортировать группы:

SELECT
    customer_id,
    SUM (amount)
FROM
    payment
GROUP BY
    customer_id
ORDER BY
    SUM (amount) DESC;

C) Пример использования условия PostgreSQL GROUP BY с агрегатной функцией COUNT()

Чтобы подсчитать количество транзакций, которые обработал каждый сотрудник, сгруппируйте таблицу payments по staff_id, а затем воспользуйтесь функцией COUNT(), чтобы получить количество транзакций, как показано в запросе ниже:

SELECT
    staff_id,
    COUNT (payment_id)
FROM
    payment
GROUP BY
    staff_id;

Условие GROUP BY сортирует набор результатов по staff_id, оно хранит промежуточный итог строк, и всякий раз, когда staff_id изменяется, добавляет строку в возвращаемый набор результатов.

Для фильтрации групп, используйте условие HAVING вместо условия WHERE.

В этом руководства вы узнали, как использовать условие PostgreSQL GROUP BY для разделения строк на группы. В следующий раз мы поговорим об условии PostgreSQL HAVING.

Источник: PostgreSQL Tutorial from Scratch

Поддержать проект

Социальные сети проекта:

Подпишись, чтобы ничего не пропустить!