Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Применение оператора SUM() для суммирования по нескольким разным промежуткам.
|
|||
|---|---|---|---|
|
#18+
Есть, например, такая таблица Table: id Class Qty1A42B63C94A125B86C207A18B59C13 Я хочу просуммировать столбец Qty по разным промежуткам id сгруппировав их по столбцу Class. Исходя из таблицы выше, мне нужно получить следующую таблицу: ClassSumQty1SumQty2SumQty3A1610B685C92013 где SumQty1 - сумма по Qty с условие того, что 1 <= id <= 4, SumQty2 - сумма по Qty с условие того, что 5 <= id <= 7, SumQty3 - сумма по Qty с условие того, что 8 <= id <= 9. Хочу обратить внимание, что промежутки разной длины. Я сделал это с использованием подзапросов следующий образом: Код: 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. Но если формировать запрос таким образом, то получается, что мы проходим по всем значениям таблицы трижды, то есть по разу для каждого подзапроса при суммировании. Есть ли какой-то способ сформировать запрос так, чтобы мы всего один раз прошли по значениям таблицы, проверили три промежутка и вывели суммы по этим промежуткам? То есть, в общем, меня интересует можно ли как-то уменьшить скорость выполнения такого запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 22:53 |
|
||
|
Применение оператора SUM() для суммирования по нескольким разным промежуткам.
|
|||
|---|---|---|---|
|
#18+
Навскидку так примерно Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 23:05 |
|
||
|
Применение оператора SUM() для суммирования по нескольким разным промежуткам.
|
|||
|---|---|---|---|
|
#18+
Прошу пардону, NULLIF забыл воткнуть. Так: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 23:14 |
|
||
|
Применение оператора SUM() для суммирования по нескольким разным промежуткам.
|
|||
|---|---|---|---|
|
#18+
Глупость выше написал, Вам же сумма нужна, а не количество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 23:21 |
|
||
|
Применение оператора SUM() для суммирования по нескольким разным промежуткам.
|
|||
|---|---|---|---|
|
#18+
Ну, смысл тот же Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2018, 23:36 |
|
||
|
Применение оператора SUM() для суммирования по нескольким разным промежуткам.
|
|||
|---|---|---|---|
|
#18+
vkle, Спасибо большое за Ваш вариант. Я пробовал написать что-то похожее, только с оператором CASE и это выглядело так: Код: plsql 1. 2. 3. 4. 5. 6. Что в принципе аналогично IF, как мне кажется. Но у меня всё равно возникает вопрос. Разве каждый оператор SUM() не проходится отдельно по таблице? То есть для первого оператора SUM() ищутся совпадения по всей таблице по условию IF или CASE, потом тоже самое по второму и третьему операторам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 00:50 |
|
||
|
Применение оператора SUM() для суммирования по нескольким разным промежуткам.
|
|||
|---|---|---|---|
|
#18+
HofmannЧто в принципе аналогично IF, как мне кажется.Кажется, в общем, правильно. С алгоритмической точки зрения оператор ветвления if...else является базовым, его можно использовать при написании более сложных конструкций, таких как case. В данном случае в case проверяется лишь одно условие, а значит, и при развертывании алгоритма там будет использован лишь один if...else. В некотором смысле case тут избыточен. :) HofmannРазве каждый оператор SUM() не проходится отдельно по таблице?Из таблицы извлекается и обрабатывается строка, где поля id и Qty присутствуют и, следовательно, их значения могут быть использованы где угодно. В данном случае значения используются в трех выражениях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 05:26 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39612415&tid=1830004]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 395ms |

| 0 / 0 |
