我的数据库中有一个过敏专栏,如果有人没有过敏,那么价值是“不适用”。如果有人确实有过敏症,则会出现过敏症的名称。
我正在尝试使用SQL和COUNT函数来计算过敏的人的百分比!=' N / A'。
虽然我遇到困难,但是任何人都可以指出我正确的方向,或者任何有有用资源的人。
ViewController
答案 0 :(得分:3)
select sum(case when allergy <> 'N/A' then 1 else 0 end) * 100 / count(*)
from your_table
答案 1 :(得分:2)
这将给出N/A
列具有非allergy
值的人的百分比(并且将忽略具有未知[NULL
]过敏值的人员:
SELECT 100 * COUNT( DECODE( allergy, 'N/A', NULL, allergy ) )
/ COUNT( allergy )
AS percentage_with_allergy
FROM table_name
要包含NULL
值,就好像它们是N/A
那样:
SELECT 100 * COUNT( DECODE( allergy, 'N/A', NULL, allergy ) )
/ COUNT( 1 )
AS percentage_with_allergy
FROM table_name
答案 2 :(得分:2)
我认为最简单的方法是将avg()
与条件聚合一起使用:
select avg(case when allergy <> 'N/A' then 100.0 else 0 end)
from t;
如果allergy
可能是NULL
,则上述内容会将其视为“N / A”。如果你真的只想计算非N / A值:
select avg(case when allergy = 'N/A' then 0.0 else 100.0 end)
from t;
答案 3 :(得分:1)
有多种方法可以做到这一点。由于我的朋友已经在几个答案中查询过,复制并粘贴答案正确/合乎道德。因此,使用更加简洁或更简单的查询。请在下面找到查询。
select (A_SUM/(select count(1) from al_table))*100 as percent from (
select count(1) A_sum from al_table where (allergy <>'N/A' or allergy is not null));