MySQL query with ranges

I am trying to simplify a set of queries into one with which I am afraid.

I want to collect counts of different ranges and am doing it right now:

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;

I want to be able to do this in one request. How can i do this?

I also need each individual request to be counted, and not just them together.

+4
source share
2 answers
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;

Try

+4
source

Maybe something like this:

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
+4
source

Source: https://habr.com/ru/post/1526300/


All Articles