INNER JOIN:将具有相同 id 的金额相加

Blu*_*Fox 1 mysql sql join inner-join

如果客户 ID (KUNDENID) 相同,则 I\xc2\xb4m 尝试将表中的金额相加。

\n\n

这是我的两张桌子:

\n\n
+----------+------------+--------+\n| KUNDENID | datum      | Betrag |\n+----------+------------+--------+\n|        2 | 2013-06-05 |  120.5 |\n|        1 | 2013-02-05 |  20.95 |\n|        3 | 2013-02-05 |  250.3 |\n|        3 | 2013-05-13 |    100 |\n|        4 | 2013-01-01 |   1500 |\n+----------+------------+--------+\n\n+----------+---------+-----------+------------------------------+--------------+-------------+\n| KUNDENID | vorname | nachname  | email                        | geburtsdatum | telefon     |\n+----------+---------+-----------+------------------------------+--------------+-------------+\n|        1 | Homer   | Simpson   | chunkylover53@aol.com        | 1956-05-02   | 555-364     |\n|        2 | Doug    | Heffernan | doug.heffernan@hotmail.com   | 1965-02-09   | 555-3684    |\n|        3 | Dexter  | Morgan    | dexter.morgan@gmail.com      | 1971-02-01   | 555-3684    |\n|        4 | Sheldon | Cooper    | sheldoncooper@gmail.com      | 1981-04-22   | 555-2274648 |\n|        5 | Maurice | Moss      | moss@Reynholm-Industries.com | 1972-03-01   | 555-6677    |\n+----------+---------+-----------+------------------------------+--------------+-------------+\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试了这个内部连接:

\n\n
SELECT k.KUNDENID, vorname, nachname, SUM(Betrag) FROM kunde k INNER JOIN verkauf v ON k.KUNDENID = v.KUNDENID GROUP BY k.KUNDENID;\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
+----------+---------+-----------+------------------+\n| KUNDENID | vorname | nachname  | SUM(Betrag)      |\n+----------+---------+-----------+------------------+\n|        1 | Homer   | Simpson   | 20.9500007629395 |\n|        2 | Doug    | Heffernan |            120.5 |\n|        3 | Dexter  | Morgan    | 350.300003051758 |\n|        4 | Sheldon | Cooper    |             1500 |\n+----------+---------+-----------+------------------+\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我知道 JOIN 是正确的,但我如何向未在同一个 JOIN 中购买任何东西的客户显示?

\n\n

我想要的输出:

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

感谢您的帮助!

\n

Rob*_*sen 5

使用LEFT JOIN而不是INNER JOIN.

\n\n
SELECT k.KUNDENID, vorname, nachname, IFNULL(SUM(Betrag), 0) AS gesamt\n    FROM kunde k\n    LEFT JOIN verkauf v ON k.KUNDENID = v.KUNDENID\n    GROUP BY k.KUNDENID;\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\n

表 A 和 B 的左外连接(或简称左连接)的结果始终包含“左”表 (A) 的所有记录,即使连接条件在表 A 中找不到任何匹配的记录。 “右”表\n (B)。这意味着,如果 ON 子句匹配 B\n 中的 0(零)条记录(对于 A 中的给定记录),连接仍将在\n 结果中返回一行(对于该记录)\xe2\x80\x94,但是B 的每列中均为 NULL。左外连接返回内连接中的所有值以及左表中与右表不匹配的所有值。

\n
\n