假设我有一个表存储公司之间的交易,每行的结构如下:
(int) buyerId | (int) sellerId | (float) transactionAmount
我想获取一个特定的公司ID,并找出他们拥有最多片面的净交易历史的公司。例如,公司A的ID为100.我想找出哪个公司的销售净值最高 - 购买。如果表数据如下:
buyerID sellerId transactionAmount
100 200 10.00
200 100 5.00
100 300 1.00
公司100从公司200购买了10.00美元的商品,公司200从公司100购买了5.00美元的商品,总净交易价值为5.00美元。公司100的净交易价值为1.00,公司300,但不到5.00美元,我对这里的最大值感兴趣。
我是否可以使用MySQL查询来查找$ 5.00总和($ 10.00 +( - $ 5.00)),其中transactionAmount字段中的值可以更改为正/负,具体取决于哪个公司是买方,哪个公司是卖家?或者我是否需要获取所有相关行并在代码中计算此最大值?
谢谢!
答案 0 :(得分:5)
您可以使用这个更简单的解决方案:
这使得该公司具有与该特定公司(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
顺便说一下,我喜欢你的用户名=)
答案 1 :(得分:1)
如果您将有问题的公司是卖方的所有记录与买方所在的记录合并,但是切换了transactionAmount的标志,那么剩下要做的就是按金额对结果进行求和。这是TEST @ SQL FIDDLE。
select partner,
sum(Amount) Amount
from
(
select sellerid Partner,
sum(transactionAmount) Amount
from Table1
where buyerid = 100
group by sellerid
union all
select buyerid,
-sum(transactionAmount) Amount
from Table1
where sellerid = 100
group by buyerid
) t
group by partner
order by Amount desc
limit 1