|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
Всем привет Возникла задача сделать выборку с аггрегацией по заданному условию. поясню на примере модель Item-Attribute многие ко многим Код: 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. 48.
нужно получить список itemid таких что для них существуют атрибуты связанные неким логическим выражением для attrid. например ((attrid = 1) OR (attrid = 2)) AND ((attrid = 3) OR (attrid = 4)) получилось такое решение Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Существует ли более красивое и оптимальное решение? версия сервера - Microsoft SQL Server 2016 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 21:22 |
|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
swirls0506 нужно получить список itemid таких что для них существуют атрибуты связанные неким логическим выражением для attrid. например ((attrid = 1) OR (attrid = 2)) AND ((attrid = 3) OR (attrid = 4)) Наверняка это будет быстрее для больших объёмов: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2020, 21:52 |
|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
swirls0506, а где там агрегирующая функция? Вы написали distinct выражение через группировку. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 11:22 |
|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
swirls0506, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 12:02 |
|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
alexeyvg Ну, можно сделать тупо экзистами. Наверняка это будет быстрее для больших объёмов: Спасибо, согласен с вами - ваш вариант будет быстрее выполняться на больших объемах. В тоже время легко можно использовать в качестве шаблона для генерации запроса с разными условиями. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 14:32 |
|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
Владислав Колосов swirls0506, а где там агрегирующая функция? Вы написали distinct выражение через группировку. а ее там и нет я написал " с агрегацией по заданному условию"... ну а что такое агрегация вопрос философский , можно понимать по разному соглашусь с определение из вики "Агрегация, или агрегирование - процесс объединения элементов в одну систему." ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 14:42 |
|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
invm, спасибо по скорости сравним с моим вариантом а вот в качестве шаблона для генерации запроса его сложнее будет использовать - условие на атрибуты может меняться, количество атрибутов задействованных также может быть разным ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 14:52 |
|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
swirls0506 по скорости сравним с моим вариантом а вот в качестве шаблона для генерации запроса его сложнее будет использовать - условие на атрибуты может меняться, количество атрибутов задействованных также может быть разным По скорости должно быть чуть быстрее, т.к. формируется не набор строк, а набор чисел (скажем, целых) Но не принципиально быстрее, т.к. всё равно придётся просканировать таблицу. А в варианте с exists есть маленький шансик, что обойдётся без сканирования. Если подмножество item в запросе небольшое (ограничено условиями), ИМХО лучше вариант ваш или invm, ибо читаться будет проще... swirls0506 по скорости сравним с моим вариантом Если выборка по небольшому подмножеству атрибутов, то будет сильно быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 16:47 |
|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
swirls0506, вы ничего не агрегируете, только удаляете из результата дубликаты строк. Использовать для этого выражение группировки не особо принято, так же, как и называть это "агрегацией". ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 17:00 |
|
запрос с агрегацией по условию
|
|||
---|---|---|---|
#18+
swirls0506 по скорости сравним с моим вариантом При большом объеме данных, каждый exists будет сканировать таблицу или индекс. Поэтому, чем больше exists'ов тем тормознее будет запрос. Код: 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. 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.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 17:04 |
|
|
start [/forum/topic.php?fid=46&msg=39950069&tid=1686197]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 290ms |
total: | 436ms |
0 / 0 |