我有一个包含多列的表,我需要查找一列的不同值的百分比分布,但只考虑满足另一列中某些条件的行。

例如,如果我有:

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中,单引号用于此目的。

08-03 16:04