【发布时间】:2020-08-12 10:59:27
【问题描述】:
我正在使用 MySQL。
从这两个表中,我需要选择每个床位分配的护士人数最多的所有房间。如果有领带,这可以只有一个房间或多个房间。
表分配
+-------+----------+ |护士 |房间 | +-------+----------+ |911923 | 1 | |916923 | 1 | |931923 | 1 | |931926 | 1 | |931927 | 4 | |931928 | 4 | +-------+----------+餐桌室
+--------+--------+ |号码 |尺寸 | +--------+--------+ | 1 | 2 | | 4 | 1 | +-------+----------+我正在尝试选择排名最高的行,但限制 1 仅限制一个值,在此示例中,两个房间的排名相同。如果多行具有相同的排名,如何选择所有排名最高的行?
SELECT ROOM.number,
(SELECT COUNT(*) FROM ALLOCATION
WHERE ALLOCATION.room = ROOM.number) / ROOM.size AS nurses_per_bed,
DENSE_RANK() OVER (ORDER BY nurses_per_bed DESC) AS SEQ
FROM ROOM
LIMIT 1
【问题讨论】:
-
您的查询问题:您不能创建列别名并在同一个选择子句中使用此别名;您需要为此执行步骤(主查询和子查询)。
LIMIT没有ORDER BY任意选择行。 MySQL 的LIMIT没有 ties 子句(您已经注意到了),但DENSE_RANK为您提供了您可以简单地在WHERE子句中限制的等级。所以,确实想做你已经在做的事情,但要一步一步地去做。请参阅我对此的回答。