我有一个包含多列的表,我需要查找一列的不同值的百分比分布,但只考虑满足另一列中某些条件的行。
例如,如果我有:
name | hat_color | hometown
--------------------------------
John | Blue | NYC
Mary | Blue | NYC
Joe | Red | NYC
Steve | Yellow | NYC
Bill | Blue | Chicago
Sue | Yellow | Chicago
我想要一个查询,告诉我纽约市每种帽子颜色的百分比:
hat_color | Percentage
Blue | 50
Red | 25
Yellow | 25
我试过了:
select hat_color, count(hat_color) * 100.0 / (select count(*) from mytable) as Percentage
from mytable
WHERE mytable.hometown="NYC"
group by hat_color;
但这是行不通的,只是给我总体百分比,就好像它是在计算整个表,而不仅仅是除数中的纽约市一样。
我假设我的“哪里”放错了地方?应该去哪里?
最佳答案
您还需要在子选择中过滤NYC。
SELECT hat_color,
count(hat_color) * 100.0 / (SELECT count(*)
FROM mytable
WHERE hometown = 'NYC') percentage
FROM mytable
WHERE hometown = 'NYC'
GROUP BY hat_color;
并且不要将字符串文字用双引号引起来。在SQL中,单引号用于此目的。