I would like to summarize in a table so that I have for each id in each round, the number of tokens “red” and “blue”. What would the SQL query for such table?
Here’s the data.
x
id | round | color | ntokens
1 | 1 | blue | 5
1 | 2 | red | 83
1 | 3 | blue | 77
2 | 3 | blue | 3
2 | 3 | red | 2
3 | 1 | red | 4
3 | 1 | blue | 55
3 | 2 | blue | 22
The result will display like below:
id | round | blue_count | red_count
1 | 1 | 5 | 0
1 | 2 | 0 | 83
1 | 3 | 77 | 0
2 | 3 | 3 | 2
3 | 1 | 44 | 4
3 | 2 | 22 | 0
I have been trying the following code:
SELECT id, round,
COUNT(color='red') as red_count,
COUNT(color='blue') as blue_count
FROM data
GROUP BY id, round
Advertisement
Answer
I would suggest this to get to the requested result table:
SELECT
id, round,
SUM(CASE WHEN color = 'red' THEN ntokens END) AS red_count,
SUM(CASE WHEN color = 'blue' THEN ntokens END) AS blue_count
FROM data
GROUP BY id, round