我有一个像这样的sql语句:
select a.id, a.valfrom ...
inner join ...
where ...;
结果我有了这个:
id val
---------
3 10
3 10
3 10
9 21
9 21
11 2
11 2
13 30
所以你可以看到,一个id有一个值。
如果我按(a.id)分组,我得到:
id val
---------
3 10
9 21
11 2
13 30
我想得到的最后一个结果是总和: 10 + 21 + 2 + 30 = 63。
那么如何才能将总和作为单一结果? 如果我做一个总和(a.val)并使用group by(a.id)我没有得到63,我得到每个id的总和,例如id = 3 - > 10 + 10 + 10 = 30。
最诚挚的问候。
答案 0 :(得分:10)
那么你不想要GROUP BY。您也无法在标准SQL中正确选择ID。你只想要:
SELECT SUM(val) FROM (SELECT DISTINCT id, val FROM ...) AS foo
但是,MySQL支持对标准SQL语法的一些扩展,可能会使这个工作起作用:
SELECT DISTINCT id, SUM(val) FROM ...
答案 1 :(得分:1)
如果您查询
select a.id, a.valfrom ...
inner join ...
where ...;
试试这个:
select sum(distinct a.valfrom)
inner join ...
where ...;
没有“分组”,请放下手。
答案 2 :(得分:0)
使用subselect和distinct:
select sum(valform) from (
select distinct a.id, a.valfrom ...
inner join ...
where ...
)
或使用分组:
select sum(valform) from (
select a.id, min(a.valfrom)
inner join ...
where ...
group by a.id
)
但我认为第一个查询会更快。
答案 3 :(得分:-1)
这样可以解决问题:)
select a.id, a.valfrom, SUM(val) as mySum ...
inner join ...
where ...
GROUP BY NULL
答案 4 :(得分:-1)
您只需使用您必须进行总结的Distinct。
select ID,Sum(Distinct Val)
from Table
Group By ID;