我经常发现自己运行查询以获取满足特定标准的人数、该人群中的总人数以及找到满足该标准的百分比。我一直在以同样的方式做一段时间,我想知道 SO 会做什么来解决相同类型的问题。以下是我编写查询的方式:
select m.state_cd
,m.injurylevel
,COUNT(distinct m.patid) as pplOnRx
,x.totalPatientsPerState
,round((COUNT(distinct m.patid) /cast(x.totalPatientsPerState as float))*100,2) as percentPrescribedNarcotics
from members as m
inner join rx on rx.patid=m.PATID
inner join DrugTable as dt on dt.drugClass=rx.drugClass
inner join
(
select m2.state_cd, m2.injurylevel, COUNT(distinct m2.patid) as totalPatientsPerState
from members as m2
inner join rx on rx.patid=m2.PATID
group by m2.STATE_CD,m2.injuryLevel
) x on x.state_cd=m.state_cd and m.injuryLevel=x.injurylevel
where drugText like '%narcotics%'
group by m.state_cd,m.injurylevel,x.totalPatientsPerState
order by m.STATE_CD,m.injuryLevel
在此示例中,并非出现在members
表格中的每个人都在rx
表格中。派生表确保所有 in的人都rx
在members
没有条件的情况下drugText like narcotics
。从我玩过的东西来看,该over(partition by
子句似乎可以在这里工作。我不知道是不是这样,在我看来就是这样。其他人将如何解决这个问题?
结果: