我正在尝试计算sql中的流行率。 有点写代码。 我想制作自动化代码。
我已经检查出我有1453477的样本量,使用计数的患病人数是851451。 患病率的计算公式是患病人数/样本数量。
select (COUNT(condition_id)/COUNT(person_id)) as prevalence
from disease
where condition_id=12345;
当我运行上面的代码时,我得到1作为输出,我想得到0.5858。
有人可以帮帮我吗? 谢谢!
答案 0 :(得分:0)
您可以通过
进行投射 count(...)/count(...)::numeric(6,4)
或
count(...)/count(...)::decimal
作为两个选项。
重要点应用于强制转换到denominator
或numerator
部分(在这种情况下为denominator
),不适用于除法
(count(...)/count(...))::numeric(6,4)
再次产生一个整数。
答案 1 :(得分:0)
在当前查询中,一次使用condition_id列,一次使用person_id列来统计疾病表中的行数。但是行数相同-这就是为什么结果为1的原因。
我认为您需要为这些列查找不同值的数量。可以使用count count来完成:
select (COUNT(DISTINCT condition_id)/COUNT(DISTINCT person_id)) as prevalence
from disease
where condition_id=12345;
答案 2 :(得分:0)
我很确定您想要的逻辑是这样的:
import Network
import Dispatch
let connection = NWConnection(host: .ipv6(.linkLocalNodes), port: 9898, using: .udp)
connection.stateUpdateHandler = { state in print(state) }
connection.start(queue: DispatchQueue(label: "UDP"))
您的版本没有样本大小,因为您要过滤掉没有条件的人。
如果数据中有重复的人,则这要复杂一些。一种方法是:
select avg( (condition_id = 12345)::int )
from disease;