|
|
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
Добрый вечер. Меня не нужно ругать и закидывать ссаными тряпками. Я уже на протяжении долгого времени ломаю голову и так и не смог прийти к правильному ответу. У меня было тестовое задание, на результат которого я уже никак не повлияю, но мне инетересно. Задача простая: Есть стандартная таблица Employees (Employee_ID, Department_ID, Salary). Нужно вывести сотрудников с максимальной в своем отделе зарплатой, избежав подзапросов . Таким образом, вариант Код: plsql 1. 2. 3. 4. отпадает, а других у меня и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 19:58 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 20:14 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
ma1tus, Не. Немного ошибся) - аналитический dense_rank. Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 20:29 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
ora601, и точно ведь..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 21:01 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
ora601, Аналитика не удовлетворяет условиям. ТСу надо группировка + dense rank. Еще задача решается для любителей экзотики через pattern matching. Или для любителей извращений через model. Без подзапросов (или inline view как у тебя). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 21:14 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopora601, Аналитика не удовлетворяет условиям. ТСу надо группировка + dense rank. Еще задача решается для любителей экзотики через pattern matching. Или для любителей извращений через model. Без подзапросов (или inline view как у тебя). У тебя слишком академическое восприятие) Без инлайн вью это возможно наверное только на model наверное. Обычно без подзапроса в таких задачах имеется ввиду без Код: plsql 1. Ну и keep dense rank выведет только одного из лидеров, что вообщем-то не верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 22:13 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
invisiblesereja, какая версія оракля? через модельку я б сделал так Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 22:30 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
ora601dbms_photoshopora601, Аналитика не удовлетворяет условиям. ТСу надо группировка + dense rank. Еще задача решается для любителей экзотики через pattern matching. Или для любителей извращений через model. Без подзапросов (или inline view как у тебя). У тебя слишком академическое восприятие) Без инлайн вью это возможно наверное только на model наверное. Обычно без подзапроса в таких задачах имеется ввиду без Код: plsql 1. Ну и keep dense rank выведет только одного из лидеров, что вообщем-то не верно. нет, не так, у Вас тоже подзапрос (инлине вю) я так понимаю, автор привел пример с подзапросом ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 22:35 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
ma1tusora601, и точно ведь..) А точно ли точно? Не смущaет что aggregate KEEP DENSE_RANK и анaлитический DENSE_RANK не эквивалентны. Посему TC неплoхo бы определиться что делaть если в oтделе несколько сотрудников с максимальной в своем отделе зарплатой. Ну и match_recognize: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:19 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
ora601У тебя слишком академическое восприятиеОтнюдь. Я заядлый практик-эникейщик. ora601Без инлайн вью это возможно наверное только на model наверное.Как я уже сказал решается через model/pattern matching. Один из вариантов модели уже написал наш коллега из Львова. Через pattern matching Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ora601Обычно без подзапроса в таких задачах имеется ввиду ... Ну и keep dense rank выведет только одного из лидеров, что вообщем-то не верно.Обычно предполагается, что уникальный один или испытуемый задаст вопрос про уникальность. Если их таки не один, то keep не проканает, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:21 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
invisiblesereja, fetch first ... with ties ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:23 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
Ну а еcли нужно только одного (например с бoльшим стажем): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:25 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
А банальный having = max уже не катит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:33 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
invisibleserejaНужно вывести сотрудников с максимальной в своем отделе зарплатой, избежав подзапросов .Все условия соблюдены. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:36 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
кросс-банальностьА банальный having = max уже не катит?Ну покажи мастерство группировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:38 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopкросс-банальностьА банальный having = max уже не катит?Ну покажи мастерство группировки. Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:39 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
Б.анальный, Таки да, как-то я забыл, что есть джойны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:42 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
12цеinvisiblesereja, fetch first ... with ties А "в своем отделе" куда воткнуть? Да и за фасадом подзапросов нeмepянo: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:43 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
Насчет: Код: plsql 1. 2. 3. 4. это у меня висит DBMS_RLS policy запрещающая U1 глядеть на SAL. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2017, 23:48 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 00:01 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
SYma1tusora601, и точно ведь..)А точно ли точно? Не смущaет что aggregate KEEP DENSE_RANK и анaлитический DENSE_RANK не эквивалентны. SY.Ну, решение в отсутствиe group by, мне приглянулось больше, чем предположенное мною) Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 07:46 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
ma1tusпредположенное мноюСорри, group by-то зачем взгромоздил... Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 08:46 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
Б.анальныйdbms_photoshopпропущено... Ну покажи мастерство группировки. Код: plsql 1. 2. 3. 4. 5. понравилолсь решение, к сожеленью, не со Львова :) ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 16:13 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
invisiblesereja, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 16:49 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
будем надеяться, что уровень дохода уникально распределен среди сотрудников ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 16:53 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
stax..Б.анальныйпропущено... Код: plsql 1. 2. 3. 4. 5. понравилолсь решение, к сожеленью, не со Львова :) ...... stax навскидку, без group by так будет (добавил order by и закомментировал group by): Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 17:19 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
booby, скорее - order by deptno, empno ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 17:25 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
booby, Зачем неравенство по empno? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 17:38 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, в данном случае оно лишнее, можно убрать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 17:48 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
boobydbms_photoshop, в данном случае оно лишнее, можно убрать. при условии , что empno - PK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 17:51 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
boobystax..пропущено... понравилолсь решение, к сожеленью, не со Львова :) ...... stax навскидку, без group by так будет (добавил order by и закомментировал group by): Код: plsql 1. 2. 3. 4. 5. 6. 7. с етим понятно, тут главное смекнуть соеденить только по deptno ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 18:01 |
|
||
|
Вывести строки с максимальным значением параметра
|
|||
|---|---|---|---|
|
#18+
stax.., хм... моя мысль так двигалась, глядя на этот group by: сказано было "без подзапросов". самый естественный для меня вариант с подзапросом выглядел бы так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. здесь антисоединение по условиям: а) ищем в том же департаменте, но б) не самого себя такого, в) у которого зарплата больше, чем у меня, и, буде тот нашелся, бракуем меня. здесь нет "соединения только по depno". Здесь явно 3 условия в соединении. то, что у меня самого зарплата не больше, чем у меня, и поэтому себя из поиска можно не исключать (т.е. исключить условие на неравенство самому себе) - частный случай, позволяющий решить, что второе условие redundant, в силу того, что третье оказывается сильнее для данного случая. Но все равно, их два остаются и оба условия соединения. запись в виде left join - прямое отражение варианта с таким подзапросом. Соединения по такому количеству условий, которое гарантирует не размножение строк результата при переходе от антисоединения к прямому соединению. В данном случае никаких дополнительных условий в прямой join дописывать не надо. Итог я бы сформулировал так: Надо смекнуть, что соединять надо при помощи внешнего соединения в пределах 1) подразделения, только с теми, у кого 2)уровень зарплаты строго выше меня и отобрать таких меня-удальцов, у которых не оказалось зарплатных соперников. Если соединяться только по подразделению, то без группировки не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2017, 18:46 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1886241]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 502ms |

| 0 / 0 |
