【问题标题】:INNER JOIN: add up amounts with same idINNER JOIN:将具有相同 id 的金额相加
【发布时间】:2014-07-03 13:25:02
【问题描述】:

如果客户 ID (KUNDENID) 相同,我会尝试将表格中的金额相加。

这是我的两张桌子:

+----------+------------+--------+
| KUNDENID | datum      | Betrag |
+----------+------------+--------+
|        2 | 2013-06-05 |  120.5 |
|        1 | 2013-02-05 |  20.95 |
|        3 | 2013-02-05 |  250.3 |
|        3 | 2013-05-13 |    100 |
|        4 | 2013-01-01 |   1500 |
+----------+------------+--------+

+----------+---------+-----------+------------------------------+--------------+-------------+
| KUNDENID | vorname | nachname  | email                        | geburtsdatum | telefon     |
+----------+---------+-----------+------------------------------+--------------+-------------+
|        1 | Homer   | Simpson   | chunkylover53@aol.com        | 1956-05-02   | 555-364     |
|        2 | Doug    | Heffernan | doug.heffernan@hotmail.com   | 1965-02-09   | 555-3684    |
|        3 | Dexter  | Morgan    | dexter.morgan@gmail.com      | 1971-02-01   | 555-3684    |
|        4 | Sheldon | Cooper    | sheldoncooper@gmail.com      | 1981-04-22   | 555-2274648 |
|        5 | Maurice | Moss      | moss@Reynholm-Industries.com | 1972-03-01   | 555-6677    |
+----------+---------+-----------+------------------------------+--------------+-------------+

我试过这个 INNER JOIN:

SELECT k.KUNDENID, vorname, nachname, SUM(Betrag) FROM kunde k INNER JOIN verkauf v ON k.KUNDENID = v.KUNDENID GROUP BY k.KUNDENID;

输出:

+----------+---------+-----------+------------------+
| KUNDENID | vorname | nachname  | SUM(Betrag)      |
+----------+---------+-----------+------------------+
|        1 | Homer   | Simpson   | 20.9500007629395 |
|        2 | Doug    | Heffernan |            120.5 |
|        3 | Dexter  | Morgan    | 350.300003051758 |
|        4 | Sheldon | Cooper    |             1500 |
+----------+---------+-----------+------------------+

所以我知道 JOIN 是正确的,但我怎样才能显示在同一个 JOIN 中没有购买任何东西的客户?

我想要的输出:

+----------+---------+-----------+------------------+
| KUNDENID | vorname | nachname  | SUM(Betrag)      |
+----------+---------+-----------+------------------+
|        1 | Homer   | Simpson   | 20.9500007629395 |
|        2 | Doug    | Heffernan |            120.5 |
|        3 | Dexter  | Morgan    | 350.300003051758 |
|        4 | Sheldon | Cooper    |             1500 |
|        5 | Maurice | Moss      |                0 |
+----------+---------+-----------+------------------+

感谢您的帮助!

【问题讨论】:

    标签: mysql sql join inner-join


    【解决方案1】:

    使用LEFT JOIN 而不是INNER JOIN

    SELECT k.KUNDENID, vorname, nachname, IFNULL(SUM(Betrag), 0) AS gesamt
        FROM kunde k
        LEFT JOIN verkauf v ON k.KUNDENID = v.KUNDENID
        GROUP BY k.KUNDENID;
    

    这是Wikipedia的基本解释。他们也展示了一个例子。

    表 A 和表的左外连接(或简称为左连接)的结果 B 总是包含“左”表 (A) 的所有记录,即使 join-condition 在“右”表中没有找到任何匹配的记录 (乙)。这意味着如果 ON 子句匹配 B 中的 0(零)条记录 (对于 A 中的给定记录),连接仍将返回 结果(对于该记录)—但在 B 的每一列中都有 NULL。左 外连接返回内连接的所有值加上所有值 在左表中与右表不匹配。

    【讨论】:

    • 谢谢,效果很好!解释帮助很大!
    【解决方案2】:

    是的,您可以使用左外连接代替内连接:

    SELECT k.KUNDENID, vorname, nachname, SUM(Betrag) AS Betrag  
    FROM kunde k LEFT OUTER JOIN verkauf v 
           ON k.KUNDENID = v.KUNDENID GROUP BY k.KUNDENID;
    

    【讨论】:

      【解决方案3】:

      我不知道kunde tableverkauf table 在哪里,但如果查询错误或错误,请切换表的名称

      SELECT a.KUNDENID,IFNULL(SUM(b.betrag),0) AS sum , a.nachname FROM kunde a
      LEFT JOIN verkauf b ON b.KUNDENID = a.KUNDENID
      GROUP BY b.KUNDENID
      ORDER BY a.KUNDENID
      

      【讨论】:

      • 谢谢! IFNULL 是我一直在寻找的东西!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2021-10-21
      • 2016-11-01
      • 2014-11-15
      • 2014-06-23
      • 1970-01-01
      相关资源
      最近更新 更多