繁体   English   中英

SQL select 行,最大值从不同表计算

[英]SQL select row(s) with max value calculated from different tables

我有以下两张表: 1. 两列护士和房间的分配 2. 两列房间的数量和大小(床位数)

分配

+------+--------+<br/>
| nurse |  room   |<br/>
+------+---------+<br/>
|911923 |    1    |<br/>
|916923 |    3    |<br/>
|931923 |    1    |<br/>
|931926 |    3    |<br/>
|931927 |    4    |<br/>
|931928 |    4    |<br/>

房间

+-------+--------+<br/>
| number |  size   |<br/>
+-------+--------+<br/>
|    1   |    10   |<br/>
|    2   |    12   |<br/>
|    3   |    1    |<br/>
|    4   |    1    |<br/>
|    5   |    1    |<br/>

我需要确定每张床位分配的护士人数最多的所有房间。 如果有领带,这可以只有一个房间或多个房间。

结果应显示房间号,每个房间分配的护士人数最多。

不允许使用JOIN操作。 我想我需要 select 将 COUNT(nurse) 除以大小后的最大值,然后 select 对应于该值的房间。 但是,当有两张桌子时,我该怎么办?

您可以使用 window function:

select room, no_nurse
from (select room, count(*) as no_nurse,
             dense_rank() over (order by count(*) desc) as seq
      from allocation a
      group by room
     ) r
where seq = 1;

如果您不能使用JOIN ,您将使用相关子查询。 要整理房间,请使用:

select r.*,
        (select count(*) from allocation a where a.room = r.number) / r.size as nurses_per_bed
from room r
order by nurses_per_bed desc;

如何获得最大值取决于数据库。 最规范的方法是将rank()与子查询一起使用,但也有其他方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM