以下のクエリは見苦しいものなので、読みやすいように十分な間隔を空けていることを願っています。このクエリは、特定の地域の出身である場合に、特定の病院を訪れる人々の割合を見つけます。たとえば、100 人が郡 X に住んでいて、20 人が病院 A に行き、80 人が病院 B に行く場合、クエリは出力します。この種のことは一体どのように行われているのですか?クエリを文書化する必要があるかどうか、またはクエリを明確にするためにできることは何でもお知らせください。
hospital A 20
hospital B 80
以下のクエリは、私が望んでいたとおりに機能しますが、考えさせられます:テーブル内のすべての郡に対してこれを行うにはどうすればよいでしょうか?
select hospitalname, round(cast(counts as float)/cast(fayettestrokepop as float)*100,2)as percentSeen
from
(
SELECT tblHospitals.hospitalname, COUNT(tblHospitals.hospitalname) AS counts, tblStateCounties_1.countyName,
(SELECT COUNT(*) AS Expr1
FROM Patient INNER JOIN
tblStateCounties ON Patient.stateCode = tblStateCounties.stateCode AND Patient.countyCode = tblStateCounties.countyCode
WHERE (tblStateCounties.stateCode = '21') AND (tblStateCounties.countyName = 'fayette')) AS fayetteStrokePop
FROM Patient AS Patient_1 INNER JOIN
tblHospitals ON Patient_1.hospitalnpi = tblHospitals.hospitalnpi INNER JOIN
tblStateCounties AS tblStateCounties_1 ON Patient_1.stateCode = tblStateCounties_1.stateCode AND Patient_1.countyCode = tblStateCounties_1.countyCode
WHERE (tblStateCounties_1.stateCode = '21') AND (tblStateCounties_1.countyName = 'fayette')
GROUP BY tblHospitals.hospitalname, tblStateCounties_1.countyName
) as t
order by percentSeen desc
編集: サンプル データ 以下のサンプル データは、最も外側のクエリ (そのas t order by
部分) を除いたものです。
countsInTheCounty 列は、「tblStateCounties_1.countyName」の後の (select count(*)..) 部分です。
hospitalName hospitalCounts countyName countsInTheCounty
st. james 23 X 300
st. jude 40 X 300
ここで、外側のクエリを使用して取得します
st james 0.076 (23/300)
st. jude 0.1333 (40/300)