我没有这个名字。因此,请随时告诉我这是否是已知的算法。
基本上我有买家和卖家,按数量排序。我想在数量方面匹配买家/卖家,从最高数量开始。如果对方没有足够的供应商,则寻找下一个最大的供应商。一个可以匹配多个供应商。
以下是一个例子:
买家 1/2/3/4 数量:+200, +120, +80, +50
卖家 1/2/3/4 数量:-160, -120, -70, -30
我想要的匹配是(B1 = 买家 1,S1 = 卖家 1):
B1 -> S1 和 S2(S1 160 个,S2 40 个)
S1 -> B1(B1有160多个)
B2 -> S1、S2(S1和S2都超过120)
S2 -> B1、B2(B1和B2都超过120)
B3 -> S1、S2(只有S1和S2超过80)
S3 -> B1,B2,B3(B1,B2,B3有70多个)
B4 -> S1、S2、S3
S4 -> B1、B2、B3、B4
我需要的是 SQL 实现,而不是 python 或其他编程语言。
CREATE TABLE BuyerTable
(
Buyer INT,
Amount INT
);
INSERT INTO BuyerTable (Buyer, Amount) VALUES
('1', '200'),
('2', '120'),
('3', '80'),
('4', '50');
SELECT * FROM BuyerTable
CREATE TABLE SellerTable
(
Seller INT,
Amount INT
);
INSERT INTO SellerTable (Seller, Amount) VALUES
('1', '160'),
('2', '120'),
('3', '70'),
('4', '30');
SELECT * FROM SellerTable
SELECT *
FROM BuyerTable b
INNER JOIN SellerTable s ON b.Amount < s.Amount
ORDER BY b.buyer, s.Amount desc
买家 | 金额 | 卖家 | 金额 |
---|---|---|---|
2 | 120 | 1 | 160 |
3 | 80 | 1 | 160 |
3 | 80 | 2 | 120 |
4 | 50 | 1 | 160 |
4 | 50 | 2 | 120 |
4 | 50 | 3 | 70 |