Как исправить ошибку group function is nested too deeply в oracle?

Пользователь

от rachel , в категории: SQL , 9 месяцев назад

Как исправить ошибку group function is nested too deeply в oracle?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от forest , 9 месяцев назад

@rachel 

Ошибка "group function is nested too deeply" возникает, когда в запросе используются вложенные агрегатные функции (например, SUM или COUNT) и группировка по нескольким столбцам. Это может произойти, если внутренняя агрегатная функция зависит от значения, вычисленного внешней агрегатной функцией.


Чтобы исправить эту ошибку, можно использовать подзапросы или общие таблицы выражений (CTE).


Например, вместо написания запроса вида:

1
2
3
SELECT department, SUM(SUM(salary)) 
FROM employees 
GROUP BY department;


Можно написать запрос с использованием подзапроса:

1
2
3
4
5
6
7
SELECT department, SUM(total_salary)
FROM (
    SELECT department, SUM(salary) as total_salary
    FROM employees
    GROUP BY department
)
GROUP BY department;


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


Если вы используете Oracle 11g или более позднюю версию, вы можете использовать общие таблицы выражений:

1
2
3
4
5
6
7
8
WITH salary_totals AS (
    SELECT department, SUM(salary) as total_salary
    FROM employees
    GROUP BY department
)
SELECT department, SUM(total_salary)
FROM salary_totals
GROUP BY department;


Общие таблицы выражений обеспечивают более читабельный и простой для понимания код.