I have a MySQL table:
create table tbl (
amount int
);
insert into tbl (amount) values (1);
insert into tbl (amount) values (2);
insert into tbl (amount) values (3);
insert into tbl (amount) values (4);
My goal is a report of how many values are in the following buckets, by using a case expression.
Bucket A: values 0-1
Bucket B: values 2-5
Bucket C: values 6-9
First lets try a simple query:
select "Bucket A" as Bucket, count(amount) "Count"
from tbl
where amount in (0,1)
union
select "Bucket B" as Bucket, count(amount) "Count"
from tbl
where amount in (2,3,4,5)
union
select "Bucket C" as Bucket, count(amount) "Count"
from tbl
where amount in (6,7,8,9);
Result:
+----------+-------+
| Bucket | Count |
+----------+-------+
| Bucket A | 1 |
| Bucket B | 3 |
| Bucket C | 0 |
+----------+-------+
Results are perfect, but I want a case expression.
So I tried this:
select
sum(case when amount in (0,1) then 1 else 0 end) as "Bucket A",
sum(case when amount in (2,3,4,5) then 1 else 0 end) as "Bucket B",
sum(case when amount in (6,7,8,9) then 1 else 0 end) as "Bucket C"
from tbl;
Result:
+----------+----------+----------+
| Bucket A | Bucket B | Bucket C |
+----------+----------+----------+
| 1 | 3 | 0 |
+----------+----------+----------+
Values are correct, and great that I have a case expression, but problem is the values got pivoted.
How can I
- use a case expression
- have no pivot?