Cor4win
@Cor4win
Изучаю android-разработку

Как оптимизировать несколько count(case ...)?

Есть запрос вида:
select 
count (case when sum >= 0 and sum <= 100 then id end) as '0-100',
count (case when sum >= 101 and sum <= 200 then id end) as '101-200',
count (case when sum >= 201 and sum <= 300 then id end) as '201-300',
count (case when sum >= 301 and sum <= 400 then id end) as '301-400',
count (case when sum >= 401 and sum <= 500 then id end) as '401-500'
from ...

Т.е. я просто считаю кол-во id, значения поля sum по которым входит в указанный диапазон, выходит довольно громоздко (у меня этих каунтов больше, чем в примере). Но как это можно сократить/оптимизировать придумать не могу, мало опыта.
Подскажите, можно ли и как? :)

p.s. between вместо >= <= не предлагать, мне так удобнее)
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
Adamos
@Adamos
SELECT COUNT(1), 100 * FLOOR(sum / 100) FROM ... GROUP BY FLOOR(sum / 100)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
BojackHorseman
@BojackHorseman Куратор тега SQL
...в творческом отпуске...
по какому критерию оптимизировать?) с точки зрения плана выполнения дальше оптимизировать уже некуда)

можно записать немного короче =))
SELECT
SUM(sum BETWEEN 0 AND 100) AS '0-100',
SUM(sum BETWEEN 101 AND 200) AS '101-200'
/* ... */
FROM ...

но сути это не изменит.
Ответ написан
profesor08
@profesor08
Ну напиши процедурку, которая будет принимать в качестве аргументов кол-во результатов и величину шага, и циклом дергаешь столько данных сколько нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы