【问题标题】:SQL SUM error (Sums and multiplies)SQL SUM 错误(和与乘)
【发布时间】:2013-04-01 01:52:07
【问题描述】:

我有两个类似的表:

TABLE1
PC   Date       Num  Name   ID
8901 01/03/2013 5099 AAA    11
8901 01/03/2013 5099 AAA    11
8901 01/03/2013 5099 AAA    11
8901 02/03/2013 5099 AAA    12
8902 03/03/2013 5099 AAA    13
8903 04/03/2013 5099 AAA    14

TABLE2
PC   Date       Num  Name ID Bar2
8901 01/03/2013 5099 AAA  11 3
8901 01/03/2013 5099 AAA  11 2
8901 01/03/2013 5099 AAA  11 9
8901 02/03/2013 5099 AAA  12 3
8902 03/03/2013 5099 AAA  13 4
8903 04/03/2013 5099 AAA  14 5

这个查询:

SELECT TABLE1.PC, TABLE1.Date, TABLE1.Num, TABLE1.Name, COUNT(*), SUM(TABLE2.Bar2)          
FROM TABLE1, TABLE2
WHERE TABLE1.ID = TABLE2.ID         
GROUP BY TABLE1.PC, TABLE1.Date, TABLE1.Num, TABLE1.Name        
ORDER BY TABLE1.PC, TABLE1.Date 

结果是:

PC      Date            Num     Name COUNT  SUM
8901    01/03/2013 0:00 5099    AAA  9      42
8901    02/03/2013 0:00 5099    AAA  1      3
8902    03/03/2013 0:00 5099    AAA  1      4
8903    04/03/2013 0:00 5099    AAA  1      5

因此,它求和,然后乘以条目的 nº ((3+2+9)*3 = 42)。

我做错了什么? 谢谢!!

【问题讨论】:

  • 为什么需要将这些表连接在一起?看来您要求和的列仅在 TABLE2 中,PC、日期、数字、名称和 ID 列是否是唯一键。我假设您在“TABLE2”中还有其他要显示的信息?如果上面提到的五列是唯一键,那么,您可以在 WHERE 子句中添加所有这些以消除似乎是您的问题的重复项。

标签: sql join count sum


【解决方案1】:

不清楚您想要什么作为期望的结果,但您可以使用子查询来获取总和:

SELECT t1.PC, 
  t1.Date, 
  t1.Num, 
  t1.Name, 
  COUNT(*), 
  t2.Total
FROM TABLE1 t1
INNER JOIN
(
  SELECT SUM(Bar2) Total, ID
  FROM TABLE2 
  GROUP BY ID
) t2
  ON t1.ID = t2.ID
GROUP BY t1.PC, t1.Date, t1.Num, t1.Name, t2.Total
ORDER BY t1.PC, t1.Date

SQL Fiddle with Demo

【讨论】:

  • 我还不确定如何将其放入 MS Query 中。我在第一个示例(ID = 11)中想要的结果是 COUNT = 9 而不是 3 和 SUM = 14 而不是 42。
猜你喜欢
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多