SQL,group by分组后分别计算组内不同值的数量
如现有一张购物表shopping
name | cargo |
---|---|
小明 | 笔 |
小明 | 橡皮 |
小明 | 笔 |
小明 | 橡皮 |
小明 | 橡皮 |
小红 | 笔 |
小红 | 橡皮 |
小红 | 橡皮 |
现要求小明和小红分别买了多少笔和多少橡皮,形成以下格式
姓名 | 笔 | 橡皮 |
---|---|---|
小明 | 2 | 3 |
小红 | 1 | 2 |
select name as 姓名,
sum( case when cargo='笔' then 1 else 0 end ) as 笔,
sum( case when cargo='橡皮' then 1 else 0 end ) as 橡皮
from shopping group by name;
注:这里不能用count计算行数,count只是别分组后每组所有行的数目