Подсчет уникальных значений SQL: функция COUNT и GROUP BY
Быстрый ответ
Для подсчета уникальных записей в данных SQL используйте комбинацию функций COUNT() и GROUP BY:
SELECT column, COUNT(*) AS count
FROM table
GROUP BY column;
Таким образом, вы получите количество каждого уникального значения в столбце column из таблицы table.

DISTINCT: Эффективная функция в мире SQL
Функция DISTINCT позволяет эффективно избавить ваши данные от дубликатов. Примените её внутри COUNT(*), чтобы подсчитать только уникальные записи и избежать дублирования:
SELECT column, COUNT(DISTINCT column) AS count
FROM table
GROUP BY column
ORDER BY count DESC;
Функция DISTINCT помогает вам упорядочить данные, показывая уникальные значения и freквенцию их появления в порядке убывания.
Альтернатива для больших объемов данных: COUNT(1)
При обработке больших объемов данных вместо COUNT(*) можно использовать COUNT(1) для увеличения производительности:
SELECT column, COUNT(1) AS count
FROM table
GROUP BY column;
Подобно Троянскому коню, COUNT(1) может "обмануть" оптимизаторы баз данных, ускорив запрос и получив быстрый результат.
Чистота и понятность данных
Комбинация GROUP BY и DISTINCT позволяет структурировать данные, исключая дубликаты и аккуратно группируя уникальные значения:
SELECT column, COUNT(DISTINCT other_column) AS count
FROM table
GROUP BY column;
Такой подход обеспечивает чистоту и организованность данных, делая все уникальные записи явно видимыми.
Визуализация
Представьте себе уникальные значения как разные драгоценные камни:
Сундук с сокровищами (🧳): [💎, 💠, 💎, 💠, 💍, 💍, 💍, 🔮]
Ваша задача – подсчитать количество каждого типа драгоценного камня:
| Драгоценный камень | Количество |
| ------------------ | ---------- |
| 💎 | 2 |
| 💠 | 2 |
| 💍 | 3 |
| 🔮 | 1 |
Это аналогично составлению инвентаря для авантюриста: понимание того, что у вас есть, может сделать разницу между успешным использованием своих ресурсов и потерей в обилии возможностей.
Практические примеры, проблемы, решения
Значения NULL: Как учесть пустые результаты?
Функция COUNT() не учитывает NULL значения. Для их учета используйте конструкцию CASE внутри COUNT():
SELECT column, COUNT(CASE WHEN other_column IS NOT NULL THEN 1 END) AS count
FROM table
GROUP BY column;
Этот подход позволяет учитывать даже значения NULL.
Сложности с типами данных: Будьте внимательны
Типы данных, такие как VARCHAR, требуют особого внимания из-за возможности возникновения пробелов или различий в регистрации символов.
Операции обединения: Корректное использование
При выполнении операций объединения очень важно правильно использовать DISTINCT, чтобы получить точные результаты:
SELECT a.column, COUNT(DISTINCT b.other_column) AS count
FROM a
JOIN b ON a.id = b.foreign_id
GROUP BY a.column;
Правильное применение DISTINCT в сочетании с COUNT() в операциях объединения обеспечивает корректные результаты.
Полезные материалы
- MySQL :: Руководство по MySQL 8.0 :: 3.3.4.8 Как считать строки — официальная документация MySQL о подсчете строк, включая
COUNT(DISTINCT). - PostgreSQL: Документация: 16: 9.21. Агрегатные функции — полное руководство PostgreSQL по агрегатным функциям с акцентом на
COUNT(DISTINCT). - Переименование физических файлов баз данных SQL Server с помощью T-SQL — детальное руководство по управлению файлами SQL Server.
- postgresql – Выбор столбцов внутри json_agg – База данных администраторов Stack Exchange — обсуждение, раскрывающее методы выбора столбцов и уникального отбора.
- sql – Выберите топ-10 записей для каждой категории – Stack Overflow — обсуждение на Stack Overflow, демонстрирующее возможности SQL SELECT.