假设我有下表:
这里A-B-C-D是购物车。我想买推车里的东西。项目的价格在每一行中。例如,购物车A有6个价格(10,9,8,7,6,5)的商品。
我只想在一个给定的推车中购买一个项目,如果在另一个推车中没有更便宜的项目,否则我想从另一个推车中购买该项目。当我购买每件物品时,我会将其标记为已购买。而且每个购物车都有不同的购买能力。对于A,我可以购买的最大值是5,对于B是6,对于C是4,对于D是1。
A车是锚,所以如果A车达到容量,我们就停下来。
所以事情会是这样的。
购买:
既然A达到了它的容量,它就到此为止了。
如何在SQL中执行此操作。我想我可以使用一个循环,但我读过SQL是为了提高效率而基于设置的。我试图做的似乎需要一个循环或递归。这是正确的方法吗?我应该使用Python来完成这件事吗?
谢谢你的帮助!
如果我没有理解错的话,您可以通过取消转轴、枚举行和筛选来非常容易地完成此操作:
select t.*
from (select cart, val,
row_number() over partition by cart order by val) as seqnum
from ((select 'A' as cart, A as val from t) union all
(select 'B' as cart, B from t) union all
(select 'C' as cart, C from t) union all
(select 'D' as cart, D from t)
) t
) t
where (cart = 'A' and seqnum <= 5) or
(cart = 'A' and seqnum <= 6) or
(cart = 'A' and seqnum <= 4) or
(cart = 'A' and seqnum <= 1)
order by val;
注意:根据您正在使用的数据库,可能有更简单的方法来取消透视。