Условие
Дана таблица task_1 с информацией о клиентах банка (поля ID, SEX, CHILD_BOOL, EDUCATION, PROFIT_FAMILY, ..., target). Напишите SQL-запрос, который вернёт две метрики одной строкой:
- общее количество записей (всех
ID), - количество уникальных
ID.
Идея — быстро понять, есть ли дубли в первичном ключе и насколько чистая выборка.
Решение
Подход
Базовая пара функций: COUNT(*) (или COUNT(ID)) — все строки, COUNT(DISTINCT ID) — уникальные значения. Разница между ними = число дублирующих записей.
Реализация
SELECT
COUNT(ID) AS total_id,
COUNT(DISTINCT ID) AS total_id_distinct
FROM task_1;Альтернатива: проверка наличия дублей одним запросом
SELECT
COUNT(*) AS total_rows,
COUNT(DISTINCT ID) AS unique_ids,
COUNT(*) - COUNT(DISTINCT ID) AS duplicate_rows
FROM task_1;Подводные камни
COUNT(ID)vsCOUNT(*).COUNT(ID)пропуститNULL-значения,COUNT(*)— посчитает все строки независимо отNULL. Если вIDмогут бытьNULL, разница важна. По смыслу первичного ключаNULLбыть не должно — но проверить стоит.- Производительность на больших таблицах.
COUNT(DISTINCT ...)без индекса заставляет сортировать или хешировать всю колонку. На сотнях миллионов строк лучше отдельным запросом сGROUP BY+HAVING COUNT(*)>1, чтобы понять характер дублей. - Не путать с числом пользователей. В таблице может быть
IDс другим смыслом (например, ID операции, а пользователь — отдельная колонка). Внимательно читать схему.
Эталонный ответ
SELECT COUNT(ID) AS total_id, COUNT(DISTINCT ID) AS total_id_distinct
FROM task_1;Если значения совпадают — дублей нет. Если total_id > total_id_distinct — есть дублирующие ID, которые надо разобрать перед дальнейшей аналитикой.