假设一家医院有很多医生。
我想找出在一段时间内每天治疗最多患者的医生。
假设的输出类似于
day doctor patient-count
1 A 2
2 B 3
在第1天,医生A治疗的患者最多,患者数为2。
我们有以下数据
day doctor patient
1 A P0
1 B P1
1 A P2
2 A P3
2 B P4
2 B P5
2 B P6
我发现的大多数例子只查找患者人数最多的单行。这是不同的,因为我需要多行(对于每个组)
我使用postgresql,如果重要的话。
答案 0 :(得分:1)
创建一个公用表表达式(cte),用于计算每位医生每日患者的数量。使用那个并验证最大患者数。
当两位医生并列领带时,他们会回来。
with cte as
(
select day, doctor, count(distinct patient) as patcnt
from tablename
group by day, doctor
)
select day, doctor
from cte t1
where patcnt = (select max(patcnt) from cte t2 where t2.day = t1.day)
注意:ANSI SQL将day
作为保留字。因此,您可能需要将其分隔为"day"
。
或者,做一个cte join:
with cte as
(
select day, doctor, count(distinct patient) as patcnt
from tablename
group by day, doctor
)
select t1.day, t1.doctor, t1.patcnt
from cte t1
join (select day, max(patcnt) as patcnt from cte) t2
on t1.day = t2.day and t1.patcnt = t2.patcnt