假设一个表具有以下架构:
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
但是这不起作用,它返回多个结果,而不是总和的单个结果。我在做什么错了?
答案 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