Возможно ли решить данную задачу с помощью 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 БЕЗ использования рекурсии?
Да, данную задачу можно решить с помощью SQL без использования рекурсии. Можно использовать следующий запрос для размещения сотрудников каждого отдела за отдельным столиком:
WITH ranked_deps AS ( SELECT id, qty, ROW_NUMBER() OVER (ORDER BY qty) AS rn FROM deps ), ranked_tables AS ( SELECT id, qty, ROW_NUMBER() OVER (ORDER BY qty) AS rn FROM tables ) SELECT d.id AS dep_id, t.id AS table_id FROM ranked_deps d JOIN ranked_tables t ON d.rn = t.rn
Этот запрос будет размещать сотрудников каждого отдела за отдельным столиком с учетом количества сотрудников в отделе и количества мест за столиком.
Да, данную задачу можно решить с помощью SQL без использования рекурсии. Можно использовать следующий запрос для размещения сотрудников каждого отдела за отдельным столиком:
WITH ranked_deps AS (SELECT id,
qty,
ROW_NUMBER() OVER (ORDER BY qty) AS rn
FROM deps
),
ranked_tables AS (
SELECT id,
qty,
ROW_NUMBER() OVER (ORDER BY qty) AS rn
FROM tables
)
SELECT d.id AS dep_id,
t.id AS table_id
FROM ranked_deps d
JOIN ranked_tables t ON d.rn = t.rn
Этот запрос будет размещать сотрудников каждого отдела за отдельным столиком с учетом количества сотрудников в отделе и количества мест за столиком.