按总和分组不会返回正确的结果

时间:2018-12-12 09:28:25

标签: mysql sql

假设一个表具有以下架构:

grp   |   number
1     |     10    
1     |     10    
1     |     10    
2     |     30    
2     |     30    
3     |     20  

请注意,即使有多个grp,每个唯一的grp也会有一个唯一的编号。我希望将每个唯一的grp的所有数字相加。

所以我想按grp将我的表分组以具有此内容:

grp   |   number
1     |     10    
2     |     30    
3     |     20  

然后得到的总和现在是60,但是不进行分组就得到110,因为它计算了不进行分组时所有内容的总和。一站式查询,如果可能,没有子查询。

我尝试执行以下操作:

SELECT sum(number) as f
FROM ...
WHERE ...
GROUP BY grp

但是这不起作用,它返回多个结果,而不是总和的单个结果。我在做什么错了?

2 个答案:

答案 0 :(得分:4)

您可以使用子查询选择唯一记录并执行sum

select sum(number)
from (select distinct grp, number
      from table t
     ) t;

答案 1 :(得分:1)

如果按组分组,则每个组都会得到一个结果。而且,它不会考虑您只希望使用每个组中的值一次的事实。

要获得所需结果,请从每个组中排一行,首先需要进行子查询,从表中选择DISTINCT组/数字组合,然后将其求和。

SELECT 
  sum(`number`) as f
FROM 
  (SELECT DISTINCT `grp`, `number` FROM table1) g

这将输出60

演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=8a3b346041731a4b4c85f4e151c10f70