Ответ
В SQL для выборки уникальных значений из столбца или набора столбцов используется оператор DISTINCT.
Синтаксис и пример:
-- Выбрать уникальные значения из одного столбца
SELECT DISTINCT department FROM employees;
-- Выбрать уникальные комбинации значений из нескольких столбцов
SELECT DISTINCT department, job_title FROM employees;
-- DISTINCT можно использовать с агрегатными функциями
SELECT COUNT(DISTINCT department) FROM employees;
Как это работает:
DISTINCT применяется ко всем столбцам, перечисленным в SELECT, и устраняет дублирующиеся строки из результирующего набора перед возвратом данных.
Важное отличие от GROUP BY:
DISTINCT и GROUP BY без агрегатных функций могут давать схожий результат, но семантически различаются:
DISTINCTуказывает на удаление дубликатов.GROUP BYуказывает на группировку для агрегации.
Пример на других языках (для контекста):
- Python: Используйте
set()илиpandas.unique().my_list = [1, 2, 2, 3] unique_values = set(my_list) # {1, 2, 3} # Или с сохранением порядка (Python 3.7+ dict, 3.6+ с collections.OrderedDict) unique_ordered = list(dict.fromkeys(my_list)) # [1, 2, 3] - JavaScript: Используйте объект
Set.const myArray = [1, 2, 2, 3]; const uniqueValues = [...new Set(myArray)]; // [1, 2, 3]
Ответ 18+ 🔞
Ага, вот эта штука, блядь, DISTINCT! Ну классика же, ёпта, как хлеб с маслом. Все её используют, а половина нихуя не понимает, как она там внутри работает, блядь.
Смотри, сука, представь себе таблицу employees. Там отделы, как грибы после дождя, повторяются. А тебе надо вытащить просто список, чтобы каждый отдел был один раз, без этих вот дублей ебаных.
Вот и пишешь:
SELECT DISTINCT department FROM employees;
И всё, блядь! Бац — и тебе вывалит уникальные отделы. Никаких повторов, чистота, блядь, как в операционной.
А если хочешь посмотреть уникальные комбинации, типа «отдел + должность», чтобы понять, какие вообще связки у тебя в конторе водятся — тоже легко:
SELECT DISTINCT department, job_title FROM employees;
Тут уже будет отсекать строки, где оба поля одинаковые. Хитро, да? Аж волнение ебать!
И да, его, сука, можно впихнуть в агрегатные функции. Хочешь посчитать, сколько у тебя вообще уникальных отделов? Пожалуйста:
SELECT COUNT(DISTINCT department) FROM employees;
Вот это уже мощь, блядь. Не просто всех посчитать, а именно разные.
А теперь, внимание, ебаный рот! Главная путаница, от которой у всех мозги вскипают, как молоко.
DISTINCT и GROUP BY — они вроде как близнецы-братья, когда GROUP BY без агрегации. Результат-то может быть одинаковый! Но смысл, блядь, разный, как между «просто помолчать» и «заткнуться нахуй».
DISTINCT— это просто команда: «Убери повторы, мне тошно на них смотреть». Всё.GROUP BY— это уже: «Сгруппируй мне всё вот по этим полям, я потом буду над каждой кучкой издеваться — считать, суммировать, усреднять». Это для агрегации, сука!
Просто если ты после GROUP BY ничего не считаешь, а просто поля из SELECT выводишь, то да — будет как DISTINCT. Но говоришь-то ты о другом! Семантика, блядь, ёпта!
Ну и для полного счастья, глянь, как в других языках эту же проблему решают:
- Python: Тут либо
set()— быстренько и без порядка, либо хитрая жопа сdict.fromkeys(), если порядок надо сохранить.my_list = [1, 2, 2, 3] unique_values = set(my_list) # {1, 2, 3} # Или с сохранением порядка (Python 3.7+ dict, 3.6+ с collections.OrderedDict) unique_ordered = list(dict.fromkeys(my_list)) # [1, 2, 3] - JavaScript: Тут красавчики через
Setделают, коротко и ясно.const myArray = [1, 2, 2, 3]; const uniqueValues = [...new Set(myArray)]; // [1, 2, 3]
Вот и вся магия, блядь. Главное — не путай DISTINCT с GROUP BY, когда тебе просто дубли убрать надо, а то над тобой потом весь отдел ржать будет, как над последним... ну, ты понял.