Собесов

SQL — количество уникальных и неуникальных ID

SQLБазовая агрегацияЛёгкаяMiddle

Условие

Дана таблица 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;

Подводные камни

  1. COUNT(ID) vs COUNT(*). COUNT(ID) пропустит NULL-значения, COUNT(*) — посчитает все строки независимо от NULL. Если в ID могут быть NULL, разница важна. По смыслу первичного ключа NULL быть не должно — но проверить стоит.
  2. Производительность на больших таблицах. COUNT(DISTINCT ...) без индекса заставляет сортировать или хешировать всю колонку. На сотнях миллионов строк лучше отдельным запросом с GROUP BY + HAVING COUNT(*)>1, чтобы понять характер дублей.
  3. Не путать с числом пользователей. В таблице может быть ID с другим смыслом (например, ID операции, а пользователь — отдельная колонка). Внимательно читать схему.

Эталонный ответ

SELECT COUNT(ID) AS total_id, COUNT(DISTINCT ID) AS total_id_distinct
FROM task_1;

Если значения совпадают — дублей нет. Если total_id > total_id_distinct — есть дублирующие ID, которые надо разобрать перед дальнейшей аналитикой.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти