代码之家  ›  专栏  ›  技术社区  ›  Tim

Group By/Distinct与Sum组合?

  •  3
  • Tim  · 技术社区  · 15 年前

    我有一个这样的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 回复  |  直到 11 年前
        1
  •  10
  •   Borealid    15 年前

    那么,你就不需要一个分组。您也无法在标准SQL中正确选择ID。你只是想要:

    SELECT SUM(val) FROM (SELECT DISTINCT id, val FROM ...) AS foo

    但是,MySQL支持对标准SQL语法的一些扩展,这些扩展可能使这项工作正常:

    SELECT DISTINCT id, SUM(val) FROM ...

        2
  •  1
  •   ceteras    15 年前

    如果查询是

    select a.id, a.valfrom ...
      inner join ...
      where ...;
    

    试试这个:

    select sum(distinct a.valfrom)
      inner join ...
      where ...;
    

    没有“分组依据”,请举手。

        3
  •  0
  •   Janick Bernet    15 年前

    使用嵌套select和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
      )
    

    但我认为第一个查询会更快。

        4
  •  -1
  •   Bogdan Constantinescu    15 年前

    这就行了:)

    select a.id, a.valfrom, SUM(val) as mySum ...
      inner join ...
      where ...
    GROUP BY NULL
    
        5
  •  -1
  •   j0k gauthamp    12 年前

    你只需要使用你必须做求和的独特的。

    select ID,Sum(Distinct Val) 
    from Table
    Group By ID;