假设我的预算为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);
提前感谢您的帮助。
利
答案 0 :(得分:0)
嗯,你给出的例子很简单:
select rank, req,
sum(req) over(order by rank) < (select budget from budget where id = '1')
as fulfilled
from component
但这没有考虑到:
因此,如果有一个组件(id = 5,rank = 5,req = 2)并且应该满足,那么这还不够。
TBH我怀疑执行分配的功能是最好的选择 - 应该很容易简单地运行“rank asc”排序的查询结果,并根据当前状态更新已完成的列。