如何对具有多个值的多个列求和

Posted

技术标签:

【中文标题】如何对具有多个值的多个列求和【英文标题】:How to Sum multiple Column with multiple value 【发布时间】:2013-08-05 19:09:31 【问题描述】:

我正在寻找以下问题的解决方案:

    进入用户表并找到在网站上列出项目的用户。在此用户表中,没有关于拍卖的列。相反,它使用键连接到帐户表(在帐户中,此列称为用户)

    从这些 ID(列出拍卖物品的用户)中,我需要找到他们的帐户余额。这也在帐户表中。余额包含在名为 operation_amount 的列中。我还有另一个名为 operation_type 的列,它描述了用户的余额是正数还是负数。比如 operation_type = 1,他的余额是负数,而 operation_type = 2,他的余额是正数。

现在我有另一个名为tmpinvoice 的表,其中有一列名为amount。这显示了用户需要向网站管理员支付多少费用。

鉴于此,我需要计算他总共必须支付多少。例如,如果一个用户有 200 美元的余额,我需要根据 operation_type 检查它是负数还是正数。

所以我有疑问在哪里做这个只是为了记录

SELECT u.id AS id_user, u.nick,
  CASE ac.operation_type WHEN 1 THEN ac.operation_amount - tm.amount
                         WHEN 2 THEN ac.operation_amount + tm.amount
                                ELSE 'N/A' END AS `fee`                         
FROM auctionbg_search.accounts AS ac    
    LEFT JOIN auctionbg_search.users AS u ON TRUE
        AND u.id = ac.user
    LEFT JOIN auctionbg_search.auctions AS a ON TRUE
        AND a.id = ac.auction
    LEFT JOIN auctionbg_search.tmpinvoice AS tm  ON TRUE    
WHERE TRUE
  AND tm.amount = ac.operation_amount

这是我收到的结果

http://gyazo.com/3d7e7f52ee14d21cc8c8d33b6bbc479a

是的,但这仅针对列中的 1 个值计算“费用”,如果用户有多个值怎么办

喜欢这个用户:

http://gyazo.com/c3bdb29fa235044ab888dc0385bbcdbd

我需要从给定用户的 operation_amount 中计算总金额并从总金额中删除 tmpinvoice

我的一个朋友告诉我使用

IF(SUM(ac.operation_amount), IS NULL , 0, sum(ac.operation_amount) 

并为 + 和 - 两种情况加入 2 个时间账户(表)

+ 加入 1 次,- 加入 2 次​​p>

但我不知道会是什么样子:)

【问题讨论】:

您使用的是什么数据库系统? mysql 5 你为什么要问? 【参考方案1】:

在 SUM 函数中使用 CASE 表达式。

   SELECT u.id AS id_user, u.nick,
     SUM(CASE ac.operation_type WHEN 1 THEN ac.operation_amount - tm.amount У
                                WHEN 2 THEN ac.operation_amount + tm.amount
                                       ELSE 'N/A' END) AS `fee`
    FROM auctionbg_search.accounts AS ac
      LEFT JOIN auctionbg_search.users AS u ON TRUE AND u.id = ac.user 
      LEFT JOIN auctionbg_search.auctions AS a ON TRUE AND a.id = ac.auction
      LEFT JOIN auctionbg_search.tmpinvoice AS tm  ON TRUE  
    WHERE TRUE AND tm.amount = ac.operation_amount
    GROUP BY u.id, u.nick       

SQLFiddle上查看演示

【讨论】:

这将计算 1 中的总列值,我需要为每个用户计算他们的余额而不是 operation_amount 中的总金额 它给出了一些不真实的结果,这里是结果示例用户 37 gyazo.com/0bcf64d53d61dc2cb4a615d25ec3d4c8 显示计算费用 232 让我们看看该用户在 operation_amount gyazo.com/96fbb0298f47671e38d7d6f9c40476a2 11.6 中有什么 + 所以让我们检查 tmpinvoice gyazo.com/0add00022a640ceb0dd864847d6584d9 没有记录tmpinvoice 那么 232 是从哪里来的呢? 检查整个请求,包括所有连接但没有 SUM 功能,也许你有一个 1:m 关联 我不明白你的意思 还有其他建议吗?

以上是关于如何对具有多个值的多个列求和的主要内容,如果未能解决你的问题,请参考以下文章

如何将具有多个值的列加载到表中的单独行中

使用 pyspark/pandas 使用列名的模式匹配对具有不同列名的多个列值求和

Ext JS:如何在具有多个列值的网格中查找记录

使用 JavaScript,如何在具有多个值的日期列的表中突出显示“今天”的每个日期

Pandas:如何根据其他列值的条件对列进行求和?

在 oracle 中对具有空值的列求和