MySQL从单独的表中添加列

时间:2013-10-16 04:35:19

标签: mysql sql sum

我是SQL的新手,无法理解如何一次使用多个表。

我有一张这样的表:

Table1
| ID | Type |
| 1  | A    |
| 2  | B    |
| 3  | C    |
| 4  | D    |

这样的一个:

Table2
| ID | Qty |
| 1  | 20  |
| 3  | 40  |
| 3  | 10  |
| 2  | 30  |
| 4  | 20  |
| 1  | 10  |

我想通过按类型对它们进行排序来显示每个ID的总和数量。我可以通过ID对它们进行排序:

SELECT ID, SUM(Qty) FROM Table2 GROUP BY ID;

这很好,我得到了我应该做的:

| ID | Qty |
| 1  | 30  |
| 2  | 30  |
| 3  | 50  |
| 4  | 20  |

所以现在我正在尝试按类型进行分组,但它不起作用。我在做:

SELECT Type, SUM(Qty) FROM Table1, Table2 GROUP BY Type;

我的输出最终是:

| Type | Qty |
| A    | 130 |
| B    | 130 |
| C    | 130 |
| D    | 130 |

很明显,它只是对整个列进行求和并显示每个Type的结果。有人可以解释我是如何正确地做到这一点的吗?

3 个答案:

答案 0 :(得分:0)

试试这个:

SELECT t1.type, SUM(t2.qty) qty FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
GROUP BY t1.type

您需要在表之间建立内部联接。通过使用FROM Table1, Table2,您实际上将table1中的所有值与table2中的所有值进行匹配。这就是你获得这些数字的原因。

答案 1 :(得分:0)

SELECT T1.Type, SUM(T2.Qty) FROM Table1 T1, Table2 T2 where  T1.ID=T2.ID GROUP BY T1.Type;

这应该有用。

答案 2 :(得分:0)

问题在于

select * from table1, table2 

返回两张桌子的笛卡尔积。它将包含count(table1) x count(table2)行,在您的情况下为4 x 6 = 24行。这不是你想要的。

有两种解决方案:

  1. 添加条件:select * from table1, table2 where table1.id = table2.id
  2. 使用加入:select * from table1 inner join table2 on table1.id = table2.id
  3. 联接是首选方法,并提供更多可能性。

    Learn more about joins