|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
graycode Это называется без тяжелой артиллерии? Если продолжить разговор про перфоманс далее, то даже однослойная аналитика уступает в производительности match_recognize а у тебя два WINDOW SORT. В плане других замечаний - не лучшая мысль сканировать исходную таблицу дважды. Код: plsql 1. 2. 3.
cross join будет быстрее, а unpivot еще быстрее. Код: plsql 1.
Нет особого смысла указывать то, что и так по умолчанию. В остальном, в решении всё разложено по полочкам, вполне прилично. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 01:39 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
НеофитSQL Одно из решений. Сгенерировать диапазон от начала первого до конца последнего можно было (но генерировать вообще не стоит) и с помощью connect by + nvl по двум скалярам. В недокументированных функциях тоже никакого смысла нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 02:00 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег НеофитSQL Одно из решений. Сгенерировать диапазон от начала первого до конца последнего можно было (но генерировать вообще не стоит) и с помощью connect by + nvl по двум скалярам. В недокументированных функциях тоже никакого смысла нет. Вы перечислили несколько недостатков моего решения, там наверное еще десяток можно насчитать :) Я не знаю как применить connect by в этом контексте, и использовал корявое формирование диапазонов надеясь, что кто-то знает как это делать правильно и эффективно. Вы можете мне показать, как из этого: Код: plsql 1. 2. 3. 4. 5. 6. 7.
Сделать такое: 1 2 red 3 3 blue 4 4 red ? Числа последовательные, без дырок. Граничные условия не важны интересен принцип ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 02:18 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
graycode не так изящно конечно и наверное можно упростить, но выкрутиться можно Если я ничего не упустил в Код: plsql 1.
смысла нет, там можно просто min. У меня с аналитикой что-то аналогичное. По сути итоговый цвет получается с помощью Код: plsql 1.
остальное - вариация на тему start of group. Код: 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.
Но еще была попытка изящно решить с помощью pattern matching. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 02:58 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
НеофитSQL, Если воспользоваться генератором из запроса env то можно дописать как-то так (но здесь не нужен генератор и коррелированные скаляры тоже не нужны) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 03:04 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Я пропустил упражнение-разминку, ответы еще принимаются? Код: plsql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 04:18 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег НеофитSQL, Если воспользоваться генератором из запроса env то можно дописать как-то так (но здесь не нужен генератор и коррелированные скаляры тоже не нужны) Спасибо, напомнили про connect-by для генерации чисел, я редко его вижу. Я спросил про connect-by, думая про задачу схлопывания интервалов. Вы это назвали "beginning of group". Есть ли оконное выражение, которое позволяет обрабатывать повторяющуеся группы, как partition by позволяет обрабатывать уникальные группы? Например, в следующем отсортитованном резалтсете есть три группы (апельсины:2, яблоки:2 и апельсины:1) апельсин 2 апельсин 3 яблоко 1 яблоко 1 апельсин 1 Как в таком случае эти группы извлечь? Есть специальный оператор, или придется ловить начало группы, подглядывая соседние строчки? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 04:37 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег Тяжесть модели в ее прожорливости к CPU & RAM. Cоответсвенно пользоваться ею когда она тривиально заменяется аналитикой/pattern matching это не самая лучшая идея. Если продолжить разговор про перфоманс далее, то даже однослойная аналитика уступает в производительности match_recognize а у тебя два WINDOW SORT. Видимо я неправильно понял задачу, я исходил из посыла что все кроме трансформации исходного запроса и аналитики запрещено. Если подходить с точки зрения производительности, то все вышеперечисленное проигрывает решению на PL/SQL, в котором даже unpivot не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 11:40 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
graycode Если подходить с точки зрения производительности, Монохромность изначальной постановки понизила градус полезности. Как автор признал, задача-баян. Необходимость решать её не сопровождаемыми способами немотивирована. Если в задаче подразумевались -лярды данных, то об этом не было заявлено. В свете всего этого лучшее решение - сопровождаемое. Т.е. уровень вхождения в который меньше/проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 12:02 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
НеофитSQL Я пропустил упражнение-разминку, ответы еще принимаются? Только полезно читать другие ответы перед публикацией своего. Возможно придёт понимание что в коррелированном скаляре нет смысла абсолютно никакого. НеофитSQL Вы это назвали "beginning of group". Есть ли оконное выражение, которое позволяет обрабатывать повторяющуеся группы, как partition by позволяет обрабатывать уникальные группы? Ты пробовал запустить 22232251 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 13:35 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
graycode Видимо я неправильно понял задачу, я исходил из посыла что все кроме трансформации исходного запроса и аналитики запрещено. 1) модель не самое подходящее средство 2) решается без подзапросов и соединений Казалось бы причем здесь вообще трансформации. Даже при наличии подзапросов они могут быть а могут и не быть. graycode Если подходить с точки зрения производительности, то все вышеперечисленное проигрывает решению на PL/SQL, в котором даже unpivot не нужен. Я даже потружусь нагенерить данных чтоб показать несостоятельность этого заявления. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 13:43 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Elic Как автор признал, задача-баян. Elic Необходимость решать её не сопровождаемыми способами немотивирована. Если в задаче подразумевались -лярды данных, то об этом не было заявлено. В свете всего этого лучшее решение - сопровождаемое. Т.е. уровень вхождения в который меньше/проще. На pattern matching, впрочем, свет тоже клином не сошелся. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 13:51 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег Если тебе по стариковски, понять многослойную аналитику проще чем pattern matching это не значит что стоит переносить сие восприятие на остальных. Кобанчег На pattern matching, впрочем, свет тоже клином не сошелся. Сопровождабельно решается джойном. Огласи систему ценностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 14:19 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Elic Выводы из-за отсутствия информации - всегда ложные. Ты не поверишь, но я даже бегло читал читал эту книгу. А что предлагается из нее почерпнуть? Elic Огласи систему ценностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 14:38 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Elic Если честно, то я не совсем понял в чём вызов. Для меня вызов был решить однопроходно в SQL, но еще до создания темы я пришел к тому что это невозможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 14:46 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Собственно мой вариант таков. Код: 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.
MATCH RECOGNIZE SORT DETERMINISTIC FINITE AUTOMATON + WINDOW SORT + UNPIVOT При попытке решить однопроходно с match recognize упираешься в то, что "активный" цвет для текущей группы определяется по всему набору а match recognize не позволяет заглядывать в предыдущие группы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 15:28 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Под однопрохоность в контексте задачи понимается одно сканирование таблицы (это неизбежно) + одна операция SORT сверху (это тоже неизбежно ибо порядок все определяет). В моем решении как видно две сортировки. В решении graycode WINDOW SORT * 5 + WINDOW BUFFER + HASH GROUP BY + 2 сканирования таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 15:34 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег что предлагается из нее почерпнуть? technical reviewer :) Кобанчег Вызова нет, тема была создана чтоб другие поразмялись... и вдруг какая новая идея всплывёт. Для меня вызов был решить однопроходно в SQL, Подтверждаешь ухудшение пятничности? Я, как старпёр, дотошен :\ ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 15:35 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Elic, Про однопроходность написано сообщением выше, критерии тоже озвучены. Мы не code golf тут занимаемся. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 16:04 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Жаль, критерий трудно определить объективно. У меня получилось так. Обилие вложенных селектов и оконных функций кажется неэффективным, но зато нет подчиненных селектов, которые считаются злом. Теперь пойду смотреть как другие решили. Интересно, какого размера нужен дата сет, чтобы померять сравнительную производительность разных подходов? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 22:12 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Заодно хочу сказать большое спасибо участникам форума за вклад в развитие новичков, включая меня. Я еще месяц назад такой код со словарем не смог бы прочитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 22:13 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег graycode Если подходить с точки зрения производительности, то все вышеперечисленное проигрывает решению на PL/SQL, в котором даже unpivot не нужен. Я даже потружусь нагенерить данных чтоб показать несостоятельность этого заявления. Я такого же мнения, что и graycode. Мне было бы интересно устроить гонки опубликованных подходов против компилированного Pl/SQL. Там все решится в один цикл без аналитических функций, повторных сортировок или временных таблиц в памяти. PL/SQL процедуру я напишу, если будут данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 02:41 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег В общем эта была разминка, теперь предлагается задачка посложнее. Необходимо наложить интервалы из источника на приемник с приоритетом из источника (если есть пересечение). я так понимаю доминантный ето src, отределяется в строке, а не цветом цветов много, поетому пересечений может быть больше двух такое union all select 7, 20, 'yellow', 'src' from dual union all select 10, 30, 'red', 'src' from dual union all select 8, 35, 'black', 'tgt' from dual union all select 33, 40, 'yellow', 'tgt' from dual возможно ? ps чтоб исключить соблазн генерации connect by, диапазаны ето даты или дробные ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 10:40 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
Кобанчег И ты сможешь его продемонстрировать? Я даже потружусь нагенерить данных чтоб показать несостоятельность этого заявления. Вроде нигде с условиями не накосячил)) Код: 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 16:00 |
|
Пятничная задача: Красное и черное
|
|||
---|---|---|---|
#18+
НеофитSQL Интересно, какого размера нужен дата сет, чтобы померять сравнительную производительность разных подходов? По хорошему нужна реальная асимптота, поэтому разного размера и самый главный момент, это то что в сложных системах, в которых параллельно работает много автоматических процессов, чистый эксперимент на производительность провести невозможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2020, 16:14 |
|
|
start [/forum/search_topic.php?author=%D0%A4%D0%B5%D0%B4%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 775ms |
total: | 958ms |
0 / 0 |