2014-02-11 3 views
4

Я пытаюсь упростить набор запросов в один, с которым я борюсь.Запрос MySQL с диапазонами

Я хочу собирать отсчеты различных диапазонов и делаю это прямо сейчас:

select count(*) from items where value < 0 and id = 43; 

select count(*) from items where (value >= 0 AND value <= 10) and id = 43; 

select count(*) from items where (value > 10 AND value <= 20) and id = 43; 

select count(*) from items where (value > 20 AND value <= 30) and id = 43; 

select count(*) from items where value > 30 and id = 43; 

Я хочу быть в состоянии сделать это в одном запросе. Как я могу это сделать?

Также мне нужны все индивидуальные запросы, а не только их общая сумма.

ответ

4
SELECT 
    SUM(IF(value < 0, 1, 0)), 
    SUM(IF(value BETWEEN 0 AND 10, 1, 0)), 
    SUM(IF(value BETWEEN 10 AND 20, 1, 0)), 
    SUM(IF(value BETWEEN 20 AND 30, 1, 0)), 
    SUM(IF(value > 30, 1, 0)) 
FROM items 
WHERE id = 43; 

Дайте это попробовать

+0

Это работает, спасибо! – HGF

4

Может быть что-то вроде этого:

SELECT 
    SUM(CASE WHEN value < 0 and id = 43 THEN 1 ELSE 0 END) AS c1 
    SUM(CASE WHEN (value >= 0 AND value <= 10) and id = 43 THEN 1 ELSE 0 END) AS c2, 
    SUM(CASE WHEN (value > 10 AND value <= 20) and id = 43 THEN 1 ELSE 0 END) AS c3, 
    SUM(CASE WHEN (value > 20 AND value <= 30) and id = 43 THEN 1 ELSE 0 END) AS c4, 
    SUM(CASE WHEN value > 30 and id = 43 THEN 1 ELSE 0 END) AS c5 
FROM 
    items 
Смежные вопросы