sql,group by,count和max

时间:2016-02-09 13:43:22

标签: sql postgresql

假设一家医院有很多医生。

我想找出在一段时间内每天治疗最多患者的医生。

假设的输出类似于

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,如果重要的话。

1 个答案:

答案 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