I'm hoping someone can help me with a SQL select statement for the following problem:
I have the following data in a table:
date | color |
---|---|
01/23/2023 | RED |
01/23/2023 | BLUE |
01/23/2023 | GREEN |
01/23/2023 | GREEN |
01/23/2023 | RED |
01/23/2023 | BLUE |
01/23/2023 | GREEN |
01/24/2023 | BLUE |
01/24/2023 | GREEN |
01/24/2023 | BLUE |
01/24/2023 | RED |
01/25/2023 | GREEN |
01/25/2023 | BLUE |
01/25/2023 | GREEN |
01/25/2023 | BLUE |
and I would like to produce this:
date | RED | BLUE | GREEN |
---|---|---|---|
01/23/2023 | 2 | 2 | 3 |
01/24/2023 | 1 | 2 | 1 |
01/25/2023 | 0 | 2 | 2 |
I'll have the exact colors so I don't need that to be determined. Sorry but I don't have any idea of how to even to beginning writing this select statement.
Thanks.
CodePudding user response:
SELECT date,
SUM(CASE WHEN color = 'RED' THEN 1 ELSE 0 END) AS RED,
SUM(CASE WHEN color = 'BLUE' THEN 1 ELSE 0 END) AS BLUE,
SUM(CASE WHEN color = 'GREEN' THEN 1 ELSE 0 END) AS GREEN
FROM table1
GROUP BY date
ORDER BY date;
CodePudding user response:
You can use CASE WHEN SUM
SELECT
edate,
SUM (CASE WHEN color = 'RED' THEN 1 ELSE 0 END) AS RED,
SUM (CASE WHEN color = 'BLUE' THEN 1 ELSE 0 END) AS BLUE,
SUM (CASE WHEN color = 'GREEN' THEN 1 ELSE 0 END) AS GREEN
FROM tablename
GROUP BY edate