Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Задача упрощенна, дано: class value_n value_mC 10 NULLC 10 1F 10 1F 10 NULLN 10 2N 10 10N 10 NULL Нужно получить: class value_n value_mC 20 14F 20 NULLN 30 NULL Т.е. все значения по колонке value_m должны проходить по классу "С". Конечно, это можно сделать использую unpivot/pivot комбинацию. Но хотелось бы более элегантное решения. К примеру, возможно ли добавить доболнительную стороку, если предыдущая содержит не нулевое значение в колонке value_m. Как то так: class value_n value_mC 10 NULLC 10 1F 10 NULLC NULL 1F 10 NULLN 10 NULLC NULL 2N 10 NULLC NULL 10N 10 NULL Скрипт прилагается: Код: sql 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. Примечание: В реальной задаче в колонке value_m крайне мало не нулевых значений. Изначальный запрос очень тяжелый, поэтому и хочу избежать комбинации с pivot. Буду рад любым идеям. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 06:59 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Idol_111 хочу избежать комбинации с pivot. Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 07:44 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Idol_111, или так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. хотя alexeyvg предложил, скорее всего, более оптимальный вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 07:49 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Idol_111 В реальной задаче в колонке value_m крайне мало не нулевых значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 08:53 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Пивот? Тут? Если учесть Idol_111 все значения по колонке value_m должны проходить по классу "С". то задача сводится к группировке с суммой по [class] с джойном потом суммы [value_m] к заданному [class] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 09:01 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 10:34 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, тут похоже моя ошибка в постановке задачи. Надо было больше акцентировать внимание, что временная талица - это на самом деле ну очень тяжелый запрос. И получается, что просчитывать его дважды как это предложил alexeyvg не рентабельно и с индексами играть не получится, т.к. значения сложно просчитываются (это комбинация нескольких запросов внутри вьюхи). А вот другие два варианта хоть и сканируют временную таблицу один раз, но создают несколько Table Spool, как это отразится на скорости запроса сложно сказать. Как проверю на реальном запросе, отпишусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 23:38 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Кстати, в конечном итоге нужно получить не просто это: class value_n value_mC 20 14F 20 NULLN 30 NULL а вот это: class value_n + value_mC 34 F 20 N 30 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2019, 23:42 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Idol_111 временная талица - это на самом деле ну очень тяжелый запрос. И получается, что просчитывать его дважды как это предложил alexeyvg не рентабельно Нужно сложный запрос оформить как CTE, и потом по предложенному варианту. А сервер уже либо сможет, либо не сможет :-) Или, как вариант, сделать предварительную группировку в ещё одном CTE (это может помочь, если агрегированный результат небольшой). Т.е. эти 2 варианта: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 00:50 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Idol_111, Чем Вас не устраивает вариант предложенный invm? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 00:53 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Может быть стоит еще посмотреть в сторону вашего "очень тяжелого запроса", чтобы он выводил данные в более удобном для последующей аггрегации формате. Или что мешает результат очень тяжелого запроса положить во временную таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 01:00 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Remind Может быть стоит еще посмотреть в сторону вашего "очень тяжелого запроса", чтобы он выводил данные в более удобном для последующей аггрегации формате. Или что мешает результат очень тяжелого запроса положить во временную таблицу? Это вьюха, которая заточена не только под этот запрос. Играем с тем, что имеем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 02:20 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
alexeyvg, на удивление Ваш варинт все же читает большинство таблиц в два раз больше, чем вариант invm. В варианте invm Table Spool не оказывают сколь-нибудь заметного влияния на время исполнения. По крайней мере пока, при выводе не большого количества строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 02:31 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Idol_111 Ваш варинт все же читает большинство таблиц в два раз больше, чем вариант invm. Table Spool не оказывают сколь-нибудь заметного влияния на время исполнения. Интересный способ сравнения: объем чтения vs. время исполнения. Set statistics on вам должен показать данные для сравнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 04:23 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
PizzaPizza Idol_111 Ваш варинт все же читает большинство таблиц в два раз больше, чем вариант invm. Table Spool не оказывают сколь-нибудь заметного влияния на время исполнения. Интересный способ сравнения: объем чтения vs. время исполнения. Set statistics on вам должен показать данные для сравнения. В данном случае, у запроса сильная корреляция: time и IO. Так я про это и говорю - set statistics. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 05:23 |
|
||
|
запрос: поиск более элегантного решения
|
|||
|---|---|---|---|
|
#18+
Idol_111 на удивление Ваш варинт все же читает большинство таблиц в два раз больше, чем вариант invm. Хотя бывают исключения и результат CTE спулится. Например, такое возможно в варианте 2 из 22018379 . Но быстрее, чем sum() over () не станет. Idol_111 В варианте invm Table Spool не оказывают сколь-нибудь заметного влияния на время исполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2019, 11:04 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39889345&tid=1686934]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 381ms |

| 0 / 0 |
