Нам нужно произвести группировку на уникальность значений в столбце, а также посчитать количества предлагаемых строк под каждый вариант уникального значения. Как это сделать в 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;
Данные в таблице состоят из одного столбца для простоты восприятия результатов вычислений. В качестве данных выступают имена людей на русском языке.
Некоторые имена повторяются по несколько раз. То есть разные записи таблицы могут содержать одинаковые имена.


Шаг 1 — Группировка данных
Для группировки данных в SQL используется предложение GROUP BY. Так как у нас всего один столбец, то наш запрос на группировку данных будет выглядеть так:
SELECT * FROM test1.names GROUP BY name;
Итоговый табличный результат после группировки:

Отлично! На этом шаге мы получили желаемый результат. Всего в столбце имён находится четыре уникальных имени.
После SELECT мы написали звёздочку так как хотели получить все столбцовые данные, … но по факту столбец один.
Шаг 2 — Подсчёт количества по группированным данным
С оператором SELECT может работать агрегатная функция COUNT(). Она считает количество, а не сумму. То, что мы передадим в эту функцию, будет подсчитываться в количественном выражении. Осталось только понять, что передавать.
Так как у нас всего один столбец, то передавать мы будем именно его название — name. Только на этот раз нам нужно получить два столбца в итоговом SELECT:
SELECT name, count(name) FROM test1.names GROUP BY name;
Итоговый табличный результат после группировки:

Группировка строится по столбцу 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