【问题标题】:sql, group by , count and maxsql、分组依据、计数和最大值
【发布时间】:2016-02-09 13:43:21
【问题描述】:

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

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

假设的输出类似于

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

【问题讨论】:

  • 标准 SQL,还是特定的 RDBMS?
  • 您需要提供更多的样本数据和基于那个数据的输出。目前只有一天,所以这个问题没有多大意义(至少对我来说)
  • @a_horse_with_no_name 我编辑了数据..

标签: sql postgresql


【解决方案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 连接:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多