数据表是这样的
string  string   int  int
  A        B      C    D
 001      小明    1    6
 002      小红    2    6
 001      小明    4    5
 003      小红    6    5首先需要将D字段最大值对应的不同人名列表出来,A字段不同取D字段最大这次,然后以B字段人名为group,将C字段相加,即得到如下结果.太晕了.
string  string   int  int
  A        B      C    D
 001      小明    5    6
 002      小红    8    6

解决方案 »

  1.   

    select a,b,sum(c) as c,max(d) as d
    from tb
    group by a,b
      

  2.   

    select a,b,sum(c) as c ,max(d) as d
    from tb
    group by a,b
      

  3.   

    select
     a,b,sum(c) as c ,max(d) as d
    from
     tb
    group by
     a,b
      

  4.   

    如果D字段是一个范围呢求和呢?比如 4<d<6
    string string int int
      A    B  C D
     001 小明 1 6
     002 小红 2 6
     001 小明 4 5
     003 小红 6 5
     002 小明 1 4
     003 小红 2 4
     004 小明 4 3
     003 小红 6 3
    D字段只是作为判断用,得到如下结果
    string string int int
      A    B  C
     001 小明 6
     002 小红 10
      

  5.   

    select a,b,sum(c) as c 
    from tb
    group by a,b
    where d between 4 and 6
      

  6.   

    select a,b,sum(c) as c  
    from tb
    where d between 4 and 6
    group by a,b
      

  7.   

    由于A字段编号没有和B字段姓名对应,所以group by a,b的话,实际会得到这样的结果
      A B C D
     001 小明 5 6
     002 小红 2 6
     003 小红 6 5
    也就是说,D字段不是全为6