MySQL选择SUM with conditional以更改要求和的列的符号

MySQL选择SUM with conditional以更改要求和的列的符号,mysql,sql,Mysql,Sql,假设我有一个表,存储公司之间的交易,每一行的结构如下: (int) buyerId | (int) sellerId | (float) transactionAmount 我想获取一个特定的公司ID,并找出他们与哪家公司进行的单边净交易历史最多。例如,A公司的ID为100。我想知道哪家公司的购销净值最高。如果表格数据如下所示: buyerID sellerId transactionAmount 100 200 10.00 200

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

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

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


谢谢

如果您将所有相关公司为卖方的记录与买方的记录合并,但切换TransactionMount的标志,则只需按金额对结果进行汇总和排序。这是


如果您将所有记录(其中有问题的公司是卖方)和所有记录(其中有问题的公司是买方)合并在一起,但要切换TransactionMount的标志,剩下要做的就是按金额对结果进行汇总和排序。这是


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

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


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

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

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


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

谢谢这太棒了!另外,我没有提到,但我也对每家公司的总金额感兴趣。对于这个问题的未来读者,可以对上面的查询稍作修改,如下所示:
选择IF(buyerID=100,sellerID,buyerID)作为其他公司,SUM(IF(buyerID=100,transactionmount,transactionmount*-1))作为netSum,其中100 IN(buyerID,sellerID)按其他公司分组按netSum DESC LIMIT 1下单
@stackunderflow,太棒了!很高兴听到它对你有用。我刚刚更新了我的答案,在选择中加入了
SUM
金额。谢谢,这太棒了!另外,我没有提到,但我也对每家公司的总金额感兴趣。对于这个问题的未来读者,可以对上面的查询稍作修改,如下所示:
选择IF(buyerID=100,sellerID,buyerID)作为其他公司,SUM(IF(buyerID=100,transactionmount,transactionmount*-1))作为netSum,其中100 IN(buyerID,sellerID)按其他公司分组按netSum DESC LIMIT 1下单
@stackunderflow,太棒了!很高兴听到它对你有用。我刚刚更新了我的答案,将
SUM
金额包含在选择中。感谢您的回答。我选择了Zane Bien提交的简单查询作为最佳答案,但这一个也是正确的。感谢您的回答。我选择了Zane Bien提交的更简单的查询作为最佳答案,但这一个也是正确的。
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
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