Возможно ли решить данную задачу с помощью SQL БЕЗ использования рекурсии? Есть две сущности – отделы (deps) и столики (столики). В рамках корпоратива необходимо разместить сотрудников каждого из отделов за отдельным столиком. Сотрудники каждого отдела могут должны быть размещены не более чем за одним столиком. И наоборот: за одним столиком могут сидеть только сотрудники одного отдела.
id – идентификатор отдела или столика. qty – количество сотрудников отдела или количество мест за столиком.
Пример данных:drop table deps;
drop table tables;
create table deps (id number, qty number);
create table tables (id number, qty number);
insert into deps values (1,100);
insert into deps values (2,50);
insert into deps values (3,40);
insert into deps values (4,10);
insert into tables values (101,100);
insert into tables values (102,100);
insert into tables values (103,40);
insert into tables values (104,10);
Подскажите плз, возможно ли решить данную задачу с помощью SQL БЕЗ использования рекурсии?

21 Авг 2019 в 06:05
190 +1
2
Ответы
1

Да, данную задачу можно решить с помощью SQL без использования рекурсии. Можно использовать следующий запрос для размещения сотрудников каждого отдела за отдельным столиком:

WITH ranked_deps AS SELECTid,qty,ROWNUMBER()OVER(ORDERBYqty)ASrnFROMdeps SELECT id,
qty,
ROW_NUMBER() OVER (ORDER BY qty) AS rn
FROM deps
SELECTid,qty,ROWN UMBER()OVER(ORDERBYqty)ASrnFROMdeps
,
ranked_tables AS SELECTid,qty,ROWNUMBER()OVER(ORDERBYqty)ASrnFROMtables SELECT id,
qty,
ROW_NUMBER() OVER (ORDER BY qty) AS rn
FROM tables
SELECTid,qty,ROWN UMBER()OVER(ORDERBYqty)ASrnFROMtables
SELECT d.id AS dep_id,
t.id AS table_id
FROM ranked_deps d
JOIN ranked_tables t ON d.rn = t.rn

Этот запрос будет размещать сотрудников каждого отдела за отдельным столиком с учетом количества сотрудников в отделе и количества мест за столиком.

20 Апр 2024 в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир