Что возвращают агрегатные и неагрегатные функции в SQL запросе?
Answer from AI
sobes.tech AI
Что хотят услышать интервьюеры:
Агрегатные функции возвращают одно значение на группу строк: например, сумму, среднее, минимум или максимум. Неагрегатные функции работают с каждой строкой отдельно и обычно возвращают значение для каждой строки результата. Ключевая разница — агрегатные функции сворачивают набор данных, а неагрегатные сохраняют построчную детализацию.
Определение:
Агрегатные функции в SQL вычисляют итог по набору строк и возвращают одно значение для всей выборки или для каждой группы после GROUP BY. Примеры: COUNT(), SUM(), AVG(), MIN(), MAX().
Неагрегатные функции не сворачивают строки в одно значение, а вычисляются для каждой строки отдельно. К ним относятся обычные выражения, функции обработки строк, дат, преобразования типов и т. п. В результате запрос возвращает столько строк, сколько прошло фильтрацию, если не используется группировка или другие операции, меняющие кардинальность.
Пример использования:
SELECT
department,
COUNT(*) AS employees_count,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
Здесь COUNT(*) и AVG(salary) — агрегатные функции, они возвращают по одному значению на каждый department.
Пример с неагрегатным выражением:
SELECT
employee_name,
salary,
salary * 1.1 AS salary_with_bonus
FROM employees;
Здесь salary * 1.1 вычисляется отдельно для каждой строки и не сворачивает набор данных.
Пояснение кода:
В первом запросе:
FROM employeesберёт все строки из таблицы.GROUP BY departmentобъединяет строки по отделу.COUNT(*)считает количество сотрудников в каждом отделе.AVG(salary)считает среднюю зарплату внутри каждого отдела.- Результат — по одной строке на отдел.
Во втором запросе:
FROM employeesберёт строки таблицы.- Для каждой строки вычисляется
salary * 1.1. - Каждая строка остаётся в результате отдельно.
- Результат — список сотрудников с рассчитанной зарплатой с бонусом.
Код здесь нужен, потому что разница лучше всего видна на SQL-примерах.
Ключевые моменты:
- Агрегатные функции возвращают одно значение для набора строк или группы.
- Неагрегатные функции возвращают значение для каждой строки отдельно.
- Агрегатные функции обычно используются вместе с
GROUP BY. - Без
GROUP BYагрегатная функция может вернуть одно значение на весь результат запроса. - Нельзя просто так смешивать в
SELECTагрегатные и неагрегатные поля безGROUP BYили агрегирования остальных полей. - Основная практическая разница — изменение количества строк в результате запроса.