Gymterview
junior

В чем разница между операторами GROUP BY и DISTINCT?

DISTINCT удаляет дублирующиеся строки из результата, оставляя только уникальные комбинации значений. GROUP BY создаёт группы для каждой уникальной комбинации значений и позволяет применять к ним агрегатные функции. Оба оператора считают NULL отдельным значением.

Характеристика DISTINCT GROUP BY
Назначение Удаление дубликатов Группировка для агрегации
Агрегатные функции Нельзя комбинировать Основное назначение
Обработка NULL Считает отдельным значением Считает равными, одна группа
Результат без агрегатов Уникальные строки Уникальные строки (эквивалентно)

Если задача — просто получить список уникальных значений без агрегации, DISTINCT семантически точнее и делает намерение очевидным. Если нужно вычислить агрегаты по группам (COUNT, SUM, AVG), необходим GROUP BY.

Пример
-- Эквивалентные запросы (только уникальные отделы)
SELECT DISTINCT department FROM employees;
SELECT department FROM employees GROUP BY department;

-- Здесь нужен именно GROUP BY
SELECT department, COUNT(*), AVG(salary)
FROM employees
GROUP BY department;

На собеседовании: для уникальных значений используйте DISTINCT, для агрегации — GROUP BY. Частая ошибка — использовать GROUP BY вместо DISTINCT для простого удаления дубликатов, что запутывает читателя.