PostgreSQL | Группировка с подсчётом количества — efim360.ru

PostgreSQL | Группировка с подсчётом количества

Нам нужно произвести группировку на уникальность значений в столбце, а также посчитать количества предлагаемых строк под каждый вариант уникального значения. Как это сделать в PostgreSQL? По сути у нас появляется две задачи, которые нужно решить в одном SQL-запросе.

Предположим у нас есть простая таблица с одним столбцом:

-- Создаём новую тестовую таблицу
CREATE TABLE test1.names (
  name text
);

-- Заполняем таблицу данными
INSERT INTO test1.names VALUES ('Иван');
INSERT INTO test1.names VALUES ('Иван');
INSERT INTO test1.names VALUES ('Николай');
INSERT INTO test1.names VALUES ('Сергей');
INSERT INTO test1.names VALUES ('Сергей');
INSERT INTO test1.names VALUES ('Сергей');
INSERT INTO test1.names VALUES ('Сергей');
INSERT INTO test1.names VALUES ('Инна');
INSERT INTO test1.names VALUES ('Инна');
INSERT INTO test1.names VALUES ('Инна');

-- Делаем выборку данных по новой таблицу
SELECT * FROM test1.names;

Данные в таблице состоят из одного столбца для простоты восприятия результатов вычислений. В качестве данных выступают имена людей на русском языке.

Некоторые имена повторяются по несколько раз. То есть разные записи таблицы могут содержать одинаковые имена.

SQL код простой таблицы с одним столбцом и повторяющимися данными - PostgreSQL
SQL код простой таблицы с одним столбцом и повторяющимися данными - PostgreSQL
Вид простой таблицы с одним столбцом в pgAdmin4 с повторением данных - PostgreSQL
Вид простой таблицы с одним столбцом в pgAdmin4 с повторением данных - PostgreSQL

 

Шаг 1 - Группировка данных

Для группировки данных в SQL используется предложение GROUP BY. Так как у нас всего один столбец, то наш запрос на группировку данных будет выглядеть так:

SELECT * FROM test1.names GROUP BY name;

Итоговый табличный результат после группировки:

Сделали группировку данных по одному столбцу в PostgreSQL
Сделали группировку данных по одному столбцу в PostgreSQL

Отлично! На этом шаге мы получили желаемый результат. Всего в столбце имён находится четыре уникальных имени.

После SELECT мы написали звёздочку так как хотели получить все столбцовые данные, ... но по факту столбец один.

 

Шаг 2 - Подсчёт количества по группированным данным

С оператором SELECT может работать агрегатная функция COUNT(). Она считает количество, а не сумму. То, что мы передадим в эту функцию, будет подсчитываться в количественном выражении. Осталось только понять, что передавать.

Так как у нас всего один столбец, то передавать мы будем именно его название - name. Только на этот раз нам нужно получить два столбца в итоговом SELECT:

SELECT name, count(name) FROM test1.names GROUP BY name;

Итоговый табличный результат после группировки:

Подсчитали количества каждого уникального значения в группе в PostgreSQL
Подсчитали количества каждого уникального значения в группе в PostgreSQL

Группировка строится по столбцу name, а подсчёт ведётся в добавленном столбце, который перенимает имя у своей агрегатной функции count. В результате имеем два столбца в новой таблице агрегированных данных.

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdmin - https://www.pgadmin.org

Официальный сайт СУБД PostgreSQL - https://www.postgresql.org

Предложение GROUP BY - https://postgrespro.ru/docs/postgresql/14/sql-select#SQL-GROUPBY

Агрегатные функции - https://postgrespro.ru/docs/postgresql/14/functions-aggregate