|
|
|
Можно ли сделать выборку одним запросом с аналитическими функциями?
|
|||
|---|---|---|---|
|
#18+
Даны расходы клиентов Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Необходимо одним запросом вывести имена клиентов с максимальными и минимальными суммарными расходами. Т.е. на выходе должна быть одна строка с двумя столбцами - "Женя" и "Витек". Интересует именно вариант одним запросом, без подзапросов. Версия не важна. Возможно ли вообще? Это не реальная задача, а просто из любви к искусству так сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 21:06 |
|
||
|
Можно ли сделать выборку одним запросом с аналитическими функциями?
|
|||
|---|---|---|---|
|
#18+
samatom, first / last Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 21:37 |
|
||
|
Можно ли сделать выборку одним запросом с аналитическими функциями?
|
|||
|---|---|---|---|
|
#18+
xtender, благодарю, а то у самого никак не клеилось, к сожалению. Конечная цель такая - одним запросом вывести клиентов с самыми большими и маленькими тратами, а также города с самыми большими и маленькими тратами (т.е. это также 1 строка, но уже 4 столбца). Как я понимаю, это уже не выбрать одним запросом из-за разных условий группировки? Добавил в выборку города: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2018, 21:52 |
|
||
|
Можно ли сделать выборку одним запросом с аналитическими функциями?
|
|||
|---|---|---|---|
|
#18+
samatomКонечная цель такаяхотелка странная, конечно - зачем запрещать подзапросы, если по факту это все равно два уровня агрегации и читаться без подзапросов будет хуже? чисто just4fun. крайне не рекомендую такое использовать если name и city not null: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. по-хорошему тут вместо извращения с decode(city,null...) надо было бы использовать grouping_id(name,city) или grouping(name)/grouping(city) - тогда было бы все просто и не было бы ограничения на not null, но оракл не переваривает их - ругается ORA-00934: group function is not allowed here... Еще более извращенный подход/воркэраунд - использование аналитики с дистинктом: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 02:20 |
|
||
|
Можно ли сделать выборку одним запросом с аналитическими функциями?
|
|||
|---|---|---|---|
|
#18+
xtender, Спасибо за наводку. Если например, необходимо будет сделать не 2 уровня аггрегации, а, скажем, 10, то, полагаю, будет профит в производительности. Пускай даже в ущерб удобочитаемости кода. Или я заблуждаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 11:36 |
|
||
|
Можно ли сделать выборку одним запросом с аналитическими функциями?
|
|||
|---|---|---|---|
|
#18+
samatomxtender, Спасибо за наводку. Если например, необходимо будет сделать не 2 уровня аггрегации, а, скажем, 10, то, полагаю, будет профит в производительности. Пускай даже в ущерб удобочитаемости кода. Или я заблуждаюсь? Мне кажется это зависит от данных, структуры БД, запросов. Если "full table scan & hash join - наше все", то да, быстрее. А если индексы, мат. view, что-то еще.... то не факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2018, 11:50 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=119&tid=1884177]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 313ms |

| 0 / 0 |
