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