从两个表中选择列并将其汇总

时间:2015-11-08 13:12:18

标签: mysql select

我已编辑了我的问题。希望这会有所帮助......

我有两张桌子

表1 包含以下字段 ID, Incomehead subIncomeHead

表2 包含以下字段 ID, Incomehead, 量

我正在尝试在mySQL中创建一个SQL查询,从表1中获取所有唯一记录(tabel1.Incomehead)并从表2中获取金额(table2.amount),其中table1.incomehead = table2.incomehead。我还需要显示“0”,其中table2.amount不适用于特定的table1.incomehead。 table1中的主键是Incomehead和SubIncomehead。因此,将有一个场景,相同的Incomehead将重复,如下所述

快照

表1

1|Subscription|Membership

2|Donation|Charity

3|Collection

4|Subscription|Carpark

5|Donation|Youth

表2

1|Subscription|100

2|Donation|100

3|Subscription|500

预期成果

Subscription|600

Donation|100

Collection|0

以下答案适用于Incomehead的唯一记录。但是,当存在多个相同值的记录时,它会给出不同的结果

希望这能澄清并期待您的支持

1 个答案:

答案 0 :(得分:2)

您不需要UNION。只需JOIN两个表格,并使用SUMgroup by

SELECT
  t1.incomehead,
  SUM(COALESCE(t2.amount, 0)) AS Total
FROM table1 AS t1 
LEFT JOIN table2 AS t2 ON t1.incomehead = t2.incomehead
GROUP BY t1.incomehead
ORDER BY total DESC;
如果第二个表中没有匹配的行,

LEFT JOIN将包含第一个表事件中的那些项,并且它将amount为空。

这会给你:

|   Incomehead | Total |
|--------------|-------|
| Subscription |   600 |
|     Donation |   100 |
|   Collection |     0 |

旁注:您应该在两个表之间创建一个外键,而不是使用字符串值来连接它们,incomehead的字符串值不应该重复两个表之间。而是从第二个表中删除它并创建一个新键incomeheadID,它将成为第一个表的外键。