问题:找出每个国家报告的病例中死亡人数的百分比。
数据分为两个表 - 案例和死亡。两个表中都有国家/地区列。死亡是没有的专栏。死亡表中的死亡人数。案例是报告的案例,在案例表中。
使用以下查询
SELECT (sum(isnull(d.deaths,0))/sum(isnull(c.cases,0)))*100
FROM cases as c
JOIN death as d ON c.country=d.country
我得到了答案0.54493487236178.
==
单独汇总和平均,我得到的平均值如下。 (同样在excel中)
SELECT sum(cases) FROM cases
值为106036635
SELECT sum(deaths) FROM death
值为716111
(716111/106036635)*100= 0.675343008.
两个值的差异如何!!
==
ALSO
SELECT c.country, (sum(d.deaths)/sum(c.cases))*100
FROM cases as c
JOIN death as d ON c.country1=d.country1 AND c.cases IS NOT NULL AND d.deaths IS NOT NULL
GROUP BY c.country
正在给我Divide by zero error encountered.
!我知道我的代码非常丑陋,因为我是新手。 Plz帮助我..
答案 0 :(得分:0)
这实际上都是正确的。您的陈述都会提供正确的信息,您只需调整查询即可查看。
我们将从您认为不正确的比率开始。请记住,在您的初始查询中,您正在进行内部联接,这就是为什么您的总和似乎不正确。如果您的病例没有死亡,那么您实际上不会计算这些病例。您的支票查询应该是
SELECT sum(cases) FROM cases where cases.country in (Select death.country from death)
和
SELECT sum(deaths) FROM death where death.country in (Select cases.country from cases)
使用此查询应显示正确的比率。
对于您的第二个问题,您可能会列出没有任何案例的国家/地区。在这种情况下,我们将要添加条件语句以帮助确定何时出现问题
Select c.country,
Case c.cases
When 0 Then
Case d.deaths
When 0 Then 0
Else 100
End
Else (sum(d.deaths)/sum(c.cases))*100
End As Ratio
From cases c
Inner Join death d
On c.country = d.country
Where c.cases Is Not Null
And d.death Is Not Null
Group By c.country
或者,如果您还想要排除0个案例,则可以将查询简化为此
Select c.country,
(sum(d.deaths)/sum(c.cases))*100 As Ratio
From cases c
Inner Join death d
On c.country = d.country
Where c.cases <> 0
And c.cases Is Not Null
And d.death Is Not Null
Group By c.country
答案 1 :(得分:0)
试试这个:
SELECT c.country, cast(sum(d.deaths)/(case when sum(c.cases) = 0 then 1 else sum(c.cases) end) as float) *100
FROM cases as c
JOIN death as d ON c.country1=d.country1 AND c.cases IS NOT NULL AND d.deaths IS NOT NULL
GROUP BY c.country