Какой SQL-оператор используется для выборки уникальных значений?

Ответ

В 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, когда тебе просто дубли убрать надо, а то над тобой потом весь отдел ржать будет, как над последним... ну, ты понял.