【问题标题】:mysql - How do we get the sum of the values on two tables?mysql - 我们如何获得两个表上的值的总和?
【发布时间】:2018-08-26 15:20:06
【问题描述】:

我有两张桌子

表:一个 --------------------- 身份证金额状态 --------------------- 4031 3000 1 4032 4000 1 4033 5000 1 4034 6000 1 4035 7000 1 4036 8000 0 表:s -------------- id a_id b_id -------------- 1 4031 20 2 4031 21 3 4032 23 4 4032 24 5 4033 25 6 4033 26 7 4034 21 8 4034 20 9 4035 25 10 4035 29 11 4036 21 12 4036 20

我们如何获得具有 (b_id = 20 AND b_id = 21) AND a.status = 1 的 a.amount 的总和?

答案应该是 9000。

【问题讨论】:

标签: mysql sql join


【解决方案1】:
SELECT SUM(amount) FROM (
JOIN s ON a.id = s.id
WHERE STATUS =1
AND (b_id = 20 OR b_id = 21) GROUP BY a.id
) AS amounts

总数:9000

如果你可以添加多次相同的数量,我想这应该可以在没有加入的情况下工作:

SELECT SUM(amount) AS total 
FROM `a`, `s` 
WHERE a_id = a.id AND (b_id = 20 OR b_id = 21) AND status = 1

总数:18000

【讨论】:

  • 点赞@Moose。
  • 我希望表 b 有 b_id = 20 AND b_id = 21
  • 是的,它不起作用 - 但经过编辑,它应该。 (b_id怎么可能同时是两个值?)
  • :D 我知道@cdaiga - 你先找到了 - 只是另一种语法,但我不知道什么更快
【解决方案2】:

试试这个:

select sum(a.amount)
from a 
join b on a.id = b.a_id 
where b.b_id IN ( 20, 21 ) and a.status = 1

【讨论】:

    【解决方案3】:

    您可以使用子查询获得答案:

    SELECT SUM(a.amount)
    FROM a
    WHERE a.status=1 AND
          EXISTS (SELECT 1
                  FROM s
                  WHERE s.a_id=a.id AND s.b_id in (20,21));
    

    没有必要对数据进行分组,因为我们想要选择数量的全局总和。

    【讨论】:

    • 查看 @Moose 对 JOIN 的回答。他完美地解释了为什么需要连接,但查询非常复杂。
    【解决方案4】:
    SELECT SUM(a.amount)
    FROM a
    WHERE a.status=1 AND
          EXISTS (SELECT 1
                  FROM s
                  WHERE s.a_id=a.id AND s.b_id=20) AND 
                  EXISTS (SELECT 1
                  FROM s
                  WHERE s.a_id=a.id AND s.b_id=21) ;
    

    【讨论】:

    • 您应该使用代码格式 Hamed :) - 使用 {} 按钮
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多