病院に複数回通院した人の数を調べるように設計されたクエリがあります。私が持っているものは機能しますが、サブクエリなしでそれを行う方法はありますか?
SELECT count(*) as counts, hospitals.hospitalname
FROM Patient INNER JOIN
hospitals ON Patient.hospitalnpi = hospitals.npi
WHERE (hospitals.hospitalname = 'X')
group by patientid, hospitalname
having count(patient.patientid) >1
order by count(*) desc
これにより、常に正しい行の数(30)が返されますが、30の数は返されません。を削除するとgroup by patientid
、結果セット全体が返されます。
私はこの問題を解決しました
select COUNT(*),hospitalname
from
(
SELECT count(*) as counts,hospitals.hospitalname
FROM hospitals INNER JOIN
Patient ON hospitals.npi = Patient.hospitalnpi
group by patientid, hospitals.hospitalname
having count(patient.patientid) >1
) t
group by t.hospitalname
order by t.hospitalname desc
常にサブクエリを使用するよりも、より洗練されたソリューションが必要だと感じています。これをどのように改善できますか?
sample data from first query
row # revisits
1 2
2 2
3 2
4 2
same data from second, working query
row# hosp. name revisitAggregate
1 x 30
2 y 15
3 z 5
患者と病院の間の単純な1対多の関係