← Все вопросы

Как выбрать только уникальные значения столбца в SQL (DISTINCT)?

Задан 23 месяца назад505 просмотров2 ответа
9

Делаю выборку городов из таблицы пользователей, но один и тот же город повторяется сотни раз. Как получить только уникальные значения, чтобы каждый город встречался один раз? Что значит «выбрать уникальные значения в SQL»?

2 ответа

14
✓ Принятый ответ — помог автору

Для удаления повторов используется ключевое слово 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 может быть медленным на больших таблицах, потому что СУБД сортирует или хеширует данные, чтобы найти повторы.

5

Альтернатива DISTINCT — GROUP BY по тому же столбцу:

SELECT city
FROM users
GROUP BY city;

Результат тот же — уникальные города. Разница в том, что GROUP BY удобен, когда вам нужно не просто уникальные значения, а ещё и агрегат рядом (например, сколько пользователей в каждом городе через COUNT(*)). Для «просто список уникальных» DISTINCT читается понятнее.

Ваш ответ

Войдите, чтобы ответить на вопрос.