Выберите несколько строк с самым высоким рангом в mysql - PullRequest
1 голос
/ 28 апреля 2020

Я использую MySQL.

. Из этих двух таблиц мне нужно выбрать все комнаты, в которых имеется наибольшее количество медсестер на одну кровать. Это может быть только одна комната или более одной, если в ie.

Распределение таблиц

+-------+---------+
| nurse |  room   |
+-------+---------+
|911923 |    1    |
|916923 |    1    |
|931923 |    1    |
|931926 |    1    |
|931927 |    4    |
|931928 |    4    |
+-------+---------+

Столовая

+--------+--------+
| number |  size  |
+--------+--------+
|    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

1 Ответ

1 голос
/ 28 апреля 2020

Шаг за шагом:

  1. Совокупные ассигнования на комнату для получения номеров комнат медсестер.
  2. Объединение комнат и подсчет медсестер (т. Е. Совокупные результаты распределения).
  3. Ранжирование полученных строк по соотношению.
  4. Отображение только строк с ранжированием # 1.

Запрос:

select room, nurses, ratio
from
(
  select
    r.room,
    a.nurses,
    a.nurses / r.size as ratio,
    dense_rank() over (order by a.nurses / r.size) as rnk
  from room r
  join
  (
    select number as room, count(*) as nurses
    from allocation
    group by number
  ) a on a.room = r.room
) ranked
where rnk = 1
order by room;
...