Ответ
Оператор DISTINCT используется в SQL-запросах для исключения дублирующихся строк из результирующего набора. Он применяется в предложении SELECT и возвращает только уникальные комбинации значений указанных столбцов.
Пример использования:
-- Получить список уникальных городов из таблицы пользователей
SELECT DISTINCT city FROM users;
-- Получить уникальные пары город-страна
SELECT DISTINCT city, country FROM users;
Ключевые особенности:
DISTINCTприменяется ко всем столбцам в спискеSELECT- Для поиска дубликатов СУБД обычно выполняет сортировку, что может влиять на производительность на больших таблицах
NULLзначения считаются равными друг другу, поэтомуDISTINCTвернет только одинNULL- Для агрегирования с подсчетом уникальных значений часто используют
COUNT(DISTINCT column):-- Подсчитать количество уникальных городов SELECT COUNT(DISTINCT city) FROM users; - В некоторых случаях альтернативой может быть
GROUP BY, но семантика отличается:GROUP BYпредназначен для агрегации, аDISTINCT— только для удаления дубликатов.
Ответ 18+ 🔞
А, ну это же про DISTINCT! Давай разжую, как есть, без соплей.
Представь, что у тебя таблица с пользователями, и там в графе «город» сплошной бардак. Один и тот же город вбит десятью разными способами: «Москва», «МСК», «г. Москва», а какой-то долбоёб вообще написал «столица». Или ещё хуже — один город повторяется сотню раз, потому что там столько людей живёт.
Вот чтобы не выгружать эту помойку из тысячи одинаковых записей, ты и пишешь DISTINCT. Это как команда базе: «Слушай, а давай-ка ты мне каждый город покажешь только по одному разу, а? Не нужно мне всю эту простыню, где Москва встречается как последняя шлюха».
Вот смотри, как это в деле:
-- Вытащи мне все города, но так, чтобы они не повторялись. Одна Москва — одна запись.
SELECT DISTINCT city FROM users;
-- А вот это уже посерьёзнее. Уникальные пары: город и страна.
-- Чтобы «Москва, Россия» и «Москва, США» (мало ли, филиал) считались разными записями.
SELECT DISTINCT city, country FROM users;
А теперь про важные детали, о которых часто забывают:
DISTINCT— это не волшебная палочка. Он жрёт ресурсы, особенно на больших таблицах. База данных, чтобы найти дубликаты, обычно всё это добро сортирует. А сортировка — операция не из лёгких. Так что если таблица на миллионы строк, думай головой, а не тыкайDISTINCTвезде, где попадётся.NULL— это отдельная песня. ВсеNULL-значения дляDISTINCTвыглядят одинаково — как пустота. Поэтому из кучи строк сNULLв колонкеcityон вернёт тебе всего одну строчку с этим самымNULL. Не два, не три — один. Запомни это, а то потом будешь охуевать, куда данные делись.- Частый запрос — посчитать, сколько вообще уникальных значений. Тут
DISTINCTвнутриCOUNT— твой лучший друг.-- Не «сколько всего записей с городом», а «сколько вообще уникальных городов». SELECT COUNT(DISTINCT city) FROM users; - И последнее, чтобы не облажаться.
DISTINCTиGROUP BY— вроде бы дают похожий результат, но цели у них разные, ёпта!GROUP BY— это для агрегации, чтобы потом к каждой группеSUM(),AVG()применить. АDISTINCT— тупо убрать повторы, и всё. Если тебе нужно просто уникальные значения — бериDISTINCT. Если нужно что-то посчитать по группам — вот тогда ужеGROUP BY. Не путай, а то получишь манду с ушами вместо красивого запроса.
Вот и вся магия. Используй с умом, а не как мартышлюшка, которая ко всем столбцам его цепляет.