Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка - group function is nested too deeply / 13 сообщений из 13, страница 1 из 1
20.04.2020, 17:28
    #39949050
endy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
Всем привет,

Данный запрос выдаёт ошибку.

SELECT AVG(MAX(salary))
FROM employees
GROUP BY first_name
HAVING AVG(MAX(salary))>50;

Но разве две групповые функции не могут быть вложены? Проблема в предложение Having, но я не могу уловить в чём именно проблема. Так как если убрать предложение Having, то запрос работает. В то же время я не раз видел вложенные групповые функции в предложении Having.
...
Рейтинг: 0 / 0
20.04.2020, 17:49
    #39949056
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
А как Вы представляете себе порядок работы и результат такого выражения?
...
Рейтинг: 0 / 0
20.04.2020, 17:59
    #39949066
endy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
andrey_anonymous,

Я новичок и наверное что то не совсем понимаю.
Мне кажется что такой запрос должен работать так:

SELECT AVG(MAX(salary)) - вычисляет среднюю от максимальной зарплаты. Например максимальная зарплата 10 000 его средняя тоже 10 000. Естественно пример так себе и далёк от реалий, но суть не в этом, а в том чтобы понять принцип работы запроса.

FROM employees - вышеуказанная средняя от максимальной зарплаты ищется в таблице employees

GROUP BY first_name - далее, идёт группировка по именам сотрудников. Например
John - 10 000
Boris - 10 000
Evgeniy - 10 000

HAVING AVG(MAX(salary))>50; - Далее из созданных групп идёт поиск по условию предложения Having и в данном случае выводятся все строки, если бы максимальная зарплата была бы 49, тогда ни одна строка не должна была быть выведена.

Я так думаю. Если не прав, то прошу объяснить. Буду вам очень благодарен.
Спасибо что откликнулись.
...
Рейтинг: 0 / 0
20.04.2020, 18:01
    #39949069
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
endy
я не раз видел вложенные групповые функции в предложении Having.
Вложение групповой функции применяется только с результатом явно указанного group by/having.
...
Рейтинг: 0 / 0
20.04.2020, 18:16
    #39949074
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
Примененная Вами конструкция подобна следующему:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select avg(X) -- средняя зарплата наиболее состоятельных тёзок (в расчете участвует по одному значению от каждой группы)
from (
SELECT MAX(salary) X -- Макс. зарплата по группе тёзок 
FROM employees
GROUP BY first_name  -- Группировка по тезкам
HAVING MAX(salary)>50 -- отобрать только те группы, в которых присутствуют состоятельные тёзки :)
);


и второй having avg тут воткнуть особо некуда, поскольку отсутствует второй group by - avg в select-list применяется ко всему результату подзапроса, это единственная неявная группа.

Ваша запись - особая форма записи двойной группировки, по сути - синтаксический сахар, позволяющий не писать подзапрос в явном виде - и от того несколько ограниченная.
...
Рейтинг: 0 / 0
20.04.2020, 18:20
    #39949075
endy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
andrey_anonymous,

Вообще возможен ли вариант где в предложении having можно увидеть вложенную групповую функцию?
Если не затруднит могли бы привести подобный пример. Спасибо за развернутый ответ.
...
Рейтинг: 0 / 0
20.04.2020, 18:21
    #39949077
endy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
-2-,

Здравствуйте. Но ведь в вышеуказанным примере присутствуют и group by и having
...
Рейтинг: 0 / 0
20.04.2020, 18:24
    #39949080
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
endy
в вышеуказанным примере присутствуют и group by и having
Верхняя функция работает с их результатом.
...
Рейтинг: 0 / 0
20.04.2020, 18:26
    #39949082
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
endy
в предложении having можно увидеть вложенную групповую функцию?

Мне подобное не встречалось и я не очень понимаю, зачем могло бы понадобиться
...
Рейтинг: 0 / 0
20.04.2020, 18:51
    #39949089
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
Еще уместно будет напомнить о разнице вычисления агрегатов с и без group by:
Код: plsql
1.
2.
3.
4.
select max(dummy) 
from dual
where dummy <> 'X'
--group by dummy --попробуйте раскомментировать и сравнить



Т.е. avg(max(..))
приводит к интерпретации верхнего запроса без group by , и, следовательно, без having - но гарантированно дающей единственную строку, это бывает удобно:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select 1 r, max(dummy)
from dual
group by dummy
having max(dummy) <> 'X'
;
 
         R MAX(DUMMY)
---------- ----------


select 1 r, max(max(dummy))
from dual
group by dummy
having max(dummy) <> 'X'
;
 
         R MAX(MAX(DUMMY))
---------- ---------------
         1 
 
SQL> 
...
Рейтинг: 0 / 0
21.04.2020, 12:10
    #39949268
endy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
andrey_anonymous
endy
в предложении having можно увидеть вложенную групповую функцию?

Мне подобное не встречалось и я не очень понимаю, зачем могло бы понадобиться


На практике возможно такое и не понадобится. Просто был тест такой, вот и решил узнать как это можно осуществить.
...
Рейтинг: 0 / 0
21.04.2020, 14:29
    #39949358
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
endy
На практике возможно такое и не понадобится. Просто был тест такой, вот и решил узнать как это можно осуществить.

на ветке появился новый тролль? или Вы сами не можете гуглить?
...
Рейтинг: 0 / 0
21.04.2020, 17:32
    #39949490
endy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка - group function is nested too deeply
alex-ls,

Гугл не дал результатов. Я задал свой вопрос на форуме в надежде получить на него ответ.
Если вам не интересно помогать или же по какой то причине вы считаете что мой вопрос не имеет место быть на данном форуме, то прошу вас пройти мимо. Я задаю свои вопросы вежливо и буду благодарен всем кто поможет.

Если вас это беспокоит, то можете не смотреть мои вопросы или пытаться мне помогать. Спасибо за понимание.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка - group function is nested too deeply / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]