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

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

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

Но разве две групповые функции не могут быть вложены? Проблема в предложение Having, но я не могу уловить в чём именно проблема. Так как если убрать предложение Having, то запрос работает. В то же время я не раз видел вложенные групповые функции в предложении Having.
...
Рейтинг: 0 / 0
Ошибка - group function is nested too deeply
    #39949056
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как Вы представляете себе порядок работы и результат такого выражения?
...
Рейтинг: 0 / 0
Ошибка - group function is nested too deeply
    #39949066
endy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Ошибка - group function is nested too deeply
    #39949069
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
endy
я не раз видел вложенные групповые функции в предложении Having.
Вложение групповой функции применяется только с результатом явно указанного group by/having.
...
Рейтинг: 0 / 0
Ошибка - group function is nested too deeply
    #39949074
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примененная Вами конструкция подобна следующему:
Код: 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
Ошибка - group function is nested too deeply
    #39949075
endy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

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

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

Мне подобное не встречалось и я не очень понимаю, зачем могло бы понадобиться
...
Рейтинг: 0 / 0
Ошибка - group function is nested too deeply
    #39949089
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще уместно будет напомнить о разнице вычисления агрегатов с и без 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
Ошибка - group function is nested too deeply
    #39949268
endy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
endy
в предложении having можно увидеть вложенную групповую функцию?

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


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

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

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

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


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