Sobes.tech
Back to questions
Middle
9

Что возвращают агрегатные и неагрегатные функции в SQL запросе?

Companies where asked
ИннотехИннотех
Магнит

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 вычисляется отдельно для каждой строки и не сворачивает набор данных.

Пояснение кода:

В первом запросе:

  1. FROM employees берёт все строки из таблицы.
  2. GROUP BY department объединяет строки по отделу.
  3. COUNT(*) считает количество сотрудников в каждом отделе.
  4. AVG(salary) считает среднюю зарплату внутри каждого отдела.
  5. Результат — по одной строке на отдел.

Во втором запросе:

  1. FROM employees берёт строки таблицы.
  2. Для каждой строки вычисляется salary * 1.1.
  3. Каждая строка остаётся в результате отдельно.
  4. Результат — список сотрудников с рассчитанной зарплатой с бонусом.

Код здесь нужен, потому что разница лучше всего видна на SQL-примерах.

Ключевые моменты:

  • Агрегатные функции возвращают одно значение для набора строк или группы.
  • Неагрегатные функции возвращают значение для каждой строки отдельно.
  • Агрегатные функции обычно используются вместе с GROUP BY.
  • Без GROUP BY агрегатная функция может вернуть одно значение на весь результат запроса.
  • Нельзя просто так смешивать в SELECT агрегатные и неагрегатные поля без GROUP BY или агрегирования остальных полей.
  • Основная практическая разница — изменение количества строк в результате запроса.