Короткий ответ
Нужно сравнить общее количество строк в таблице с количеством уникальных значений этого столбца: SELECT COUNT(*), COUNT(DISTINCT order_id) FROM orders; — если числа совпадают, столбец уникален.
Как это работает подробнее
COUNT(*) считает все строки, а COUNT(DISTINCT order_id) — только уникальные значения столбца; если order_id действительно не повторяется, оба числа будут равны. Если второе число меньше первого, значит есть повторяющиеся значения.
Пример кода
question-31.sql
SELECT COUNT(*) AS total_rows, COUNT(DISTINCT order_id) AS unique_ids
FROM orders;Что использовать на практике
- эту проверку стоит делать перед тем, как использовать столбец как ключ соединения (
JOIN) — если ожидаемый уникальный ключ на самом деле содержит дубликаты,JOINпо нему может незаметно размножить строки («fan-out») и искажённо увеличить последующие суммы. Еслиtotal_rows = 5000иunique_ids = 4980, значит есть 20 «лишних» дублирующихся строк, которые нужно расследовать отдельным запросом сGROUP BY order_id HAVING COUNT(*) > 1.
Подводные камни
- проверяют уникальность только «на глаз», просматривая первые несколько строк, или полагаются на документацию/название столбца («id» в названии не гарантирует реальную уникальность в данных, особенно если это не настоящий первичный ключ в БД, а просто поле из выгрузки).