为SQL中的排名组件分配预算

时间:2010-05-25 04:32:25

标签: sql postgresql

假设我的预算为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);

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

嗯,你给出的例子很简单:

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”排序的查询结果,并根据当前状态更新已完成的列。