Распределить бюджет для ранжированных компонентов в SQL - PullRequest
0 голосов
/ 25 мая 2010

Предположим, у меня есть бюджет в 10 долларов (любое целое число), и я хочу распределить его по записям, имеющим поле ранга с различными потребностями. Пример:

rank     Req.    Fulfilled?  
1       $3           Y  
2       $4           Y  
3       $2           Y  
4       $3           N  

Эти ранги от 1 до 3 должны быть выполнены, потому что они в рамках бюджета. тогда как тот, кто занял 4 место, не должен.

Я хочу, чтобы SQL-запрос решил эту проблему.

Ниже мой первоначальный сценарий:

CREATE TABLE budget (
id VARCHAR (32),
budget INTEGER,
PRIMARY KEY (id));

CREATE TABLE component (
id VARCHAR (32),
rank INTEGER,
req INTEGER,
satisfied BOOLEAN,
PRIMARY KEY (id));

INSERT INTO budget (id,budget) VALUES ('1',10);
INSERT INTO component (id,rank,req) VALUES ('1',1,3);
INSERT INTO component (id,rank,req) VALUES ('2',2,4);
INSERT INTO component (id,rank,req) VALUES ('3',3,2);
INSERT INTO component (id,rank,req) VALUES ('4',4,3);

Заранее спасибо за помощь.

Lee

1 Ответ

0 голосов
/ 25 мая 2010

Ну, пример, который вы привели, довольно прост:

select rank, req,
       sum(req) over(order by rank) < (select budget from budget where id = '1')
             as fulfilled
from component

Но это не учитывает:

  • из бюджета осталось 2 единицы, которые можно было бы перераспределить на другой компонент с меньшими потребностями
  • бюджет выделяется на компоненты ранга, не уверен, что это то, что вы имели в виду

Так что, если был компонент (id = 5, rank = 5, req = 2), и это должно быть выполнено, этого недостаточно.

TBH Я подозреваю, что функция, выполняющая выделение, - лучшая ставка. Должно быть довольно просто выполнить запрос, упорядоченный по «rank asc», и обновить выполненный столбец в соответствии с текущим состоянием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...