powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывести строки с максимальным значением параметра
7 сообщений из 32, страница 2 из 2
Вывести строки с максимальным значением параметра
    #39425116
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..Б.анальныйпропущено...
Код: plsql
1.
2.
3.
4.
5.
select e1.deptno, e1.empno, e1.sal
from emp e1
join emp e2 on e2.deptno=e1.deptno
group by e1.deptno, e1.empno, e1.sal  
having e1.sal = max(e2.sal)


понравилолсь решение, к сожеленью, не со Львова :)

......
stax
навскидку, без group by так будет (добавил order by и закомментировал group by):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select e1.deptno, e1.empno, e1.sal
from emp e1
left join emp e2 on e2.deptno=e1.deptno and e1.empno != e2.empno and e1.sal < e2.sal
--group by e1.deptno, e1.empno, e1.sal  
--having e1.sal = max(e2.sal)
where e2.empno is null
order by empno
...
Рейтинг: 0 / 0
Вывести строки с максимальным значением параметра
    #39425120
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
скорее -
order by deptno, empno
...
Рейтинг: 0 / 0
Вывести строки с максимальным значением параметра
    #39425131
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

Зачем неравенство по empno?
...
Рейтинг: 0 / 0
Вывести строки с максимальным значением параметра
    #39425141
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
в данном случае оно лишнее, можно убрать.
...
Рейтинг: 0 / 0
Вывести строки с максимальным значением параметра
    #39425144
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobydbms_photoshop,
в данном случае оно лишнее, можно убрать.
при условии , что empno - PK
...
Рейтинг: 0 / 0
Вывести строки с максимальным значением параметра
    #39425151
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobystax..пропущено...

понравилолсь решение, к сожеленью, не со Львова :)

......
stax
навскидку, без group by так будет (добавил order by и закомментировал group by):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select e1.deptno, e1.empno, e1.sal
from emp e1
left join emp e2 on e2.deptno=e1.deptno and e1.empno != e2.empno and e1.sal < e2.sal
--group by e1.deptno, e1.empno, e1.sal  
--having e1.sal = max(e2.sal)
where e2.empno is null
order by empno


с етим понятно, тут главное смекнуть соеденить только по deptno

.....
stax
...
Рейтинг: 0 / 0
Вывести строки с максимальным значением параметра
    #39425176
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

хм...
моя мысль так двигалась, глядя на этот group by:
сказано было "без подзапросов".
самый естественный для меня вариант с подзапросом выглядел бы так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select e1.deptno, e1.empno, e1.sal
from emp e1
where 
not exists(select * 
               from emp e2 
              where  e2.deptno=e1.deptno and e2.empno != e1.empno and e2.sal > e1.sal
)
order by deptno, empno


здесь антисоединение по условиям:
а) ищем в том же департаменте, но б) не самого себя такого, в) у которого зарплата больше, чем у меня, и, буде тот нашелся, бракуем меня.

здесь нет "соединения только по depno". Здесь явно 3 условия в соединении.
то, что у меня самого зарплата не больше, чем у меня, и поэтому себя из поиска можно не исключать (т.е. исключить условие на неравенство самому себе) - частный случай,
позволяющий решить, что второе условие redundant, в силу того, что третье оказывается сильнее для данного случая.
Но все равно, их два остаются и оба условия соединения.
запись в виде left join - прямое отражение варианта с таким подзапросом.

Соединения по такому количеству условий, которое гарантирует не размножение строк результата при переходе от антисоединения к прямому соединению.
В данном случае никаких дополнительных условий в прямой join дописывать не надо.
Итог я бы сформулировал так:
Надо смекнуть, что соединять надо при помощи внешнего соединения в пределах 1) подразделения, только с теми, у кого 2)уровень зарплаты строго выше меня и отобрать таких меня-удальцов, у которых не оказалось зарплатных соперников.

Если соединяться только по подразделению, то без группировки не обойтись.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вывести строки с максимальным значением параметра
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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