分组/分明与总和相结合?

时间:2010-07-13 13:26:24

标签: sql mysql aggregate-functions

我有一个像这样的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。

最诚挚的问候。

5 个答案:

答案 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;