1

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

(int) buyerId | (int) sellerId | (float) transactionAmount

我想获取一个特定的公司 ID,并找出他们与哪家公司的净交易历史最多。例如,公司 A 的 ID 为 100。我想找出哪个公司的 SALES - PURCHASES 的净值最高。如果表数据如下:

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 与公司 300 的净交易价值也为 1.00,但低于 5.00 美元,我对这里的最大值感兴趣。

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

谢谢!

4

2 回答 2

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

SQL-Fiddle 演示

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

于 2012-07-10T01:43:12.767 回答
1

如果您将所有相关公司作为卖方的记录与作为买方的记录结合起来,但切换一个 transactionAmount 的符号,那么剩下要做的就是按金额对结果进行汇总和排序。这是测试@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
于 2012-07-10T00:14:45.260 回答