这个匹配算法的SQL实现?

问题描述 投票:0回答:1

我没有这个名字。因此,请随时告诉我这是否是已知的算法。

基本上我有买家和卖家,按数量排序。我想在数量方面匹配买家/卖家,从最高数量开始。如果对方没有足够的供应商,则寻找下一个最大的供应商。一个可以匹配多个供应商。

以下是一个例子:

买家 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 或其他编程语言。

sql
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.