[英]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.