У меня есть вопрос о запросе данных. Когда я хочу получить конкретные цвета (красный и синий) продаваемых предметов и их количество из следующих данных

id  item    color
1   card    red
2   card    red
3   card    blue
4   card    blue
5   light   red
6   light   blue
7   light   yellow
8   cup red
9   cup red
10  cup blue

В этот формат

item    red blue
card    2   2
light   1   1
cup     2   0

Я начал с этого.

select item ,color, count(*) from shops where color in ('red','blue') group by item , color

Но когда я попытался разделить «красный», «синий» на 2 столбца. Я понятия не имею, как это сделать. Буду признателен, если кто-то может дать некоторые ключевые слова или направление для этой проблемы.

1
Long Ranger 21 Мар 2017 в 12:23

2 ответа

Лучший ответ

Вы можете использовать это:

SELECT item, 
    SUM(CASE WHEN color = 'red' THEN 1 ELSE 0 END) AS red,
    SUM(CASE WHEN color = 'blue' THEN 1 ELSE 0 END) AS blue
FROM table_name
GROUP BY item;
3
Pham X. Bach 21 Мар 2017 в 09:27

Попробуйте с двумя пунктами, с делом внутри них:

select  item,
        count(case when color = 'red' then item end) as red,
        count(case when color = 'blue' then item end) as blue
from    shops
group by item
0
Stefano Zanini 21 Мар 2017 в 09:26