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

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-оболочки pgAdminhttps://www.pgadmin.org

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

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

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