特定の基準を満たす人の数、その母集団の合計人数、およびその基準を満たすパーセンテージを取得するためにクエリを実行していることに気付くことがよくあります。私はしばらくの間同じ方法でそれを行ってきました.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
。派生テーブルは、 の条件なしrx
でも にいるすべての人を確認します。私が少し遊んだことから、この句はここで機能するようです。そうなのかどうかはわかりませんが、私にはそう思われます。他の誰かがこの問題にどのように取り組むでしょうか?members
drugText like narcotics
over(partition by
結果: