Sql 查找满足特定条件的行的百分比
我有一个包含多个列的表,我需要找到一列中不同值的百分比分布,但只考虑满足不同列中某些条件的行 例如,如果我有:Sql 查找满足特定条件的行的百分比,sql,Sql,我有一个包含多个列的表,我需要找到一列中不同值的百分比分布,但只考虑满足不同列中某些条件的行 例如,如果我有: name | hat_color | hometown -------------------------------- John | Blue | NYC Mary | Blue | NYC Joe | Red | NYC Steve | Yellow | NYC Bill | Blue | Chicago Su
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;
但这不起作用,只是给了我总的百分比,就好像它在计算整个表格,而不仅仅是纽约市的除数
我想我的手机放错地方了?它应该去哪里 您还需要在子选择中筛选纽约市
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中,单引号用于此目的。最简单的方法是条件聚合:
select hat_color,
avg(case when mytable.hometown = 'NYC' then 100.0 else 0 end) as Percentage
from mytable
group by hat_color;
不需要子查询
编辑:
我误解了这个问题。根据需要,您可以使用窗口功能:
select hat_color,
count(*) * 100.0 / sum(count(*)) over () as Percentage
from mytable
where mytable.hometown = 'NYC'
group by hat_color;
在子查询中添加where子句select count*from mytable where mytable.HOUSERY='NYC'如果您有时间,请检查错误:这计算有多少蓝色帽子来自NYC 66.666%,红色100%和黄色50%相同。它不按城市过滤。