Как выбрать только уникальные значения столбца в SQL (DISTINCT)?
Делаю выборку городов из таблицы пользователей, но один и тот же город повторяется сотни раз. Как получить только уникальные значения, чтобы каждый город встречался один раз? Что значит «выбрать уникальные значения в SQL»?
2 ответа
Для удаления повторов используется ключевое слово DISTINCT сразу после SELECT:
SELECT DISTINCT city
FROM users;
В результате каждый город попадёт в вывод ровно один раз, даже если в таблице 500 строк с «Москва».
DISTINCT работает по всему набору перечисленных столбцов, а не по одному. Если написать так:
SELECT DISTINCT city, country
FROM users;
то уникальной считается пара (город, страна). То есть строки Москва / Россия и Москва / Беларусь (опечатка в данных) останутся обе.
Частая ошибка новичков — думать, что SELECT DISTINCT city, country уберёт повторы только по городу. Нет: уникальность проверяется по комбинации всех столбцов после DISTINCT.
Если нужно посчитать, сколько уникальных значений, оберните в COUNT:
SELECT COUNT(DISTINCT city) FROM users;
DISTINCT может быть медленным на больших таблицах, потому что СУБД сортирует или хеширует данные, чтобы найти повторы.
Альтернатива DISTINCT — GROUP BY по тому же столбцу:
SELECT city
FROM users
GROUP BY city;
Результат тот же — уникальные города. Разница в том, что GROUP BY удобен, когда вам нужно не просто уникальные значения, а ещё и агрегат рядом (например, сколько пользователей в каждом городе через COUNT(*)). Для «просто список уникальных» DISTINCT читается понятнее.