如何通过关系表对数字求和?

时间:2018-08-23 21:29:13

标签: mysql sql

我有一个产品表

+------------+---------------+---------------+
| ProductCod |    unitPrice  | name          |
+------------+---------------+---------------+
|          1 |            30 | some          |
|          2 |            20 | poor          |
|          3 |            10 | example       |
+------------+---------------+---------------+

另一种SALES(我认为这是不需要的)和其他一些注册n..m关系的

+------------+----------+------------+
|   quantity | sellCode | productCod |
+------------+----------+------------+
|          3 |        1 |          1 |
|          5 |        1 |          2 |
|          4 |        2 |          2 |
|          4 |        2 |          3 |
|          4 |        2 |          3 |
+------------+----------+------------+

我如何选择产品列表,以及在所有收银机上售出了多少产品?

我想要类似的东西

+---------+------+
|    name | sold |
+---------+------+
|    some |    3 |
|    poor |    9 |
| example |    8 |
+---------+------+

2 个答案:

答案 0 :(得分:3)

在这里使用INNER JOIN更准确。

查询

SELECT 
   products.name
 , SUM(sales.quantity) AS sold 
FROM 
 products
INNER JOIN 
 sales
USING(productCod)
GROUP BY 
 products.name
ORDER BY 
 products.ProductCod ASC

SELECT 
   products.name
 , SUM(sales.quantity) AS sold 
FROM 
 products
INNER JOIN 
 sales
ON
  products.productCod = sales.productCod 
GROUP BY 
 products.name
ORDER BY 
 products.ProductCod ASC

结果

|    name | sold |
|---------|------|
|    some |    3 |
|    poor |    9 |
| example |    8 |

参见演示http://sqlfiddle.com/#!9/10cd3e/5

答案 1 :(得分:1)

select p.Name, sum(s.Quantity) as sold
from Products p
left join Sales s on p.ProductCod = s.ProductCod
group by p.ProductCod, p.Name;

我们要做的是首先使用productCod公共字段连接两个表。我们正在使用LEFT join,因为可能有些产品根本没有售出。然后,我们将按productCod(和Name)分组的数量相加(由于不是聚合表达式,并且每个productCod有一个Name),因此必须将其包括在列表中。这是正确的,因为产品和销售之间存在一对多的关系。如果存在多对多关系,那么结果将是错误的。

编辑:选中此SQLFiddle sample以获得良好的格式。