Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找满足特定条件的行的百分比_Sql - Fatal编程技术网

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%相同。它不按城市过滤。