MySQL使用条件选择SUM以更改要求的列的符号

sta*_*low 1 mysql sql

假设我有一个表存储公司之间的交易,每一行的结构如下:

(int) buyerId | (int) sellerId | (float) transactionAmount
Run Code Online (Sandbox Code Playgroud)

我想获取一个特定的公司ID,并找出他们拥有最多单边网络交易历史的公司.例如,公司A的ID为100.我想找出哪个公司的销售净值最高 - 购买.如果表数据如下:

buyerID     sellerId    transactionAmount
100         200         10.00
200         100         5.00
100         300         1.00
Run Code Online (Sandbox Code Playgroud)

公司100从公司200购买了10.00美元的商品,公司200从公司100购买了5.00美元的商品,总净交易价值为5.00美元.公司100的净交易价值为1.00,公司300但不到5.00美元,我对这里的最大值感兴趣.

是否有MySQL查询我可以用来查找$ 5.00总和($ 10.00 +( - $ 5.00)),其中transactionAmount字段中的值可以更改为正/负,具体取决于哪个公司是买方,哪个公司是卖方?或者我是否需要获取所有相关行并在代码中计算此最大值?

谢谢!

Zan*_*ien 6

您可以使用这个更简单的解决方案:

这使得该特定公司(100)具有最高净交易价值的公司:

SELECT 
    IF(buyerID = 100, sellerID, buyerID) AS other_company,
    SUM(IF(buyerID = 100, transactionAmount, transactionAmount * -1)) AS netSum
FROM transactions
WHERE 100 IN (buyerID, sellerID)
GROUP BY other_company
ORDER BY netSum DESC
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

SQL-Fiddle演示

顺便说一下,我喜欢你的用户名=)