Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Как посчитать среднее значение по группе без GROUP BY?

Вопрос проверяет умение использовать оконные функции SQL для агрегации данных без группировки строк, что полезно для сохранения детализации записей.

Короткий ответ

Для вычисления среднего значения по группе без GROUP BY в SQL используются оконные функции. Вместо свёртки строк в одну агрегированную запись, оконная функция с предложением OVER позволяет рассчитать среднее для каждой строки на основе заданной группы. Например, AVG(salary) OVER(PARTITION BY department_id) покажет среднюю зарплату по отделу рядом с каждой записью сотрудника. Это сохраняет исходные строки, добавляя к ним агрегированное значение.

Длинный ответ

В SQL оператор GROUP BY традиционно используется для агрегации данных по группам, сводя несколько строк в одну. Однако иногда требуется сохранить все исходные строки, добавив к каждой из них вычисленное среднее значение по её группе. Для этой цели идеально подходят оконные функции (window functions).

Что такое оконные функции?

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

Синтаксис и пример

Основной синтаксис для расчёта среднего по группе:

SELECT
    employee_id,
    department_id,
    salary,
    AVG(salary) OVER (PARTITION BY department_id) AS avg_department_salary
FROM employees;

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

  • AVG(salary) — агрегатная функция, используемая как оконная.
  • OVER (PARTITION BY department_id) определяет окно: данные разбиваются на группы по department_id, и среднее вычисляется внутри каждой группы отдельно.
  • Каждая строка результата содержит исходные поля сотрудника и добавленное среднее значение по его отделу.

Практическое применение

Такой подход полезен в аналитических отчётах, где нужно сравнить индивидуальные показатели с групповыми. Например, можно быстро увидеть, зарплата какого сотрудника выше или ниже средней по отделу, не теряя детализации.

Оконные функции поддерживаются в большинстве современных СУБД: PostgreSQL, MySQL (с версии 8.0), SQL Server, Oracle.

Итог: Используйте оконные функции с PARTITION BY, когда нужно добавить агрегированные значения (как среднее) к детальным записям без свёртки строк, что часто требуется для аналитики и сравнений.

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • SQL

Ключевые слова

#SQL

#window functions

#aggregation

#AVG

#OVER

Подпишись на Java Developer в телеграм