如何显示最大计数的行?

How do I display rows from a max count?

我想return所有数据,来自患者最多的医院的最大计数查询。当我尝试嵌套查询时,我似乎得到的是显示医院数据的所有行。我试图查看堆栈溢出和其他站点中的类似问题,这似乎是一个简单的查询,但我不明白。

select max(highest_hospital) as max_hospital
from (select count(hospital) as highest_hospital
from doctor
group by hospital)

highest_hospital
-------------
            3

Doc ID  Doctor           Patient               Hospital    Medicine   Cost
------ -------           ------            ---------      ------     --------
1      Jim Bob         Patient1             Town 1        Medicine 1   4000
2      Janice Smith    Patient2             Town 2        Medicine 3    3000
3      Harold Brown    Patient3             Town 2        Medicine 5    2000
4      Larry  Owens    Patient4             Town 2        Medicine 6    3000
5      Sally Brown     Patient5             Town 3        Medicine 7    4000
6      Bob Jim         Patient6             Town 4        Medicine 8     6000

结果应为 return,共 3 行

Doc ID  Doctor           Patient               Hospital    Medicine   Cost
------ -------           ------            ---------      ------     --------
2      Janice Smith    Patient2             Town 2        Medicine 3    3000
3      Harold Brown    Patient3             Town 2        Medicine 5    2000
4      Larry  Owens    Patient4             Town 2        Medicine 6    3000

您可以使用 window 函数:

select d.*
from (select d.*, max(hospital_count) over () as max_hospital_count
      from (select d.*, count(*) over (partition by hospital) as hospital_count
            from doctor d
           ) d
     ) d
where hospital_count = max_hospital_count;

编辑:

使用GROUP BY 很痛苦。如果您只查找一家医院(即使有联系),那么在 Oracle 12C 中您可以这样做:

select d.*
from doctor d
where d.hospital = (select d2.hospital
                    from doctor d2
                    group by d2.hospital
                    order by count(*) desc
                    fetch first 1 row only
                   );

您可以在早期版本的 Oracle 中使用附加子查询来执行此操作。