本帖最后由 koko200147 于 2013-03-19 17:39:45 编辑

解决方案 »

  1.   

    select sum(value)
    from tb A
    where exists (select 1 from tb B where A.address=B.address and A.value<B.value)
      

  2.   

    address  value
     1         5
     1         4
     1         9
     2         2
     2         6
     2         10
     2         12
     3         1
     3         9select address,sum(value)
     from tT A
     where exists (select 1 from tT B where A.address=address and A.value>value)
    GROUP BY address
      

  3.   

    select address,sum(value)
    from tb A
    where exists(select 1 from tb B where A.address=B.address and A.value>B.VALUE)
    group by address;
      

  4.   

    select address,sum(value) from t where (address,value) not in (select address,max(value) from t group by address) group by address
      

  5.   

    select address,sum(value)-max(value)
    from table
    group by address
      

  6.   

    我是这样实现的
    先select max(value), count(*) from tableA group by address;
    得到每个地址的最大值
    然后遍历求和。能用一个语句实现么?
      

  7.   

    tT A tT B 这些都是什么?
      

  8.   

    这个相当于
    tT as A
    或者
    tT as B
    为表名取别名,以示区分
    列名也可以这样去别名
      

  9.   

    我的目的是将相同address的记录中value最大的那个相加,你这个计算结果好像不对吧。
      

  10.   

    因为value和mysql关键字冲突,所以我换成了value_tSELECT address,SUM(value_t) 
    FROM (SELECT * 
    FROM t 
    WHERE (address,value_t) NOT IN (select address,max(value_t) AS value_t FROM t GROUP BY address)) AS t2
    GROUP BY address############################################################
    #最里面的select语句:select address,max(value_t) AS value_t FROM t GROUP BY address 是用来把分组以后每一组最大的值找出来
    #然后用NOT IN 表示需要的数据不在这个里面
    #再用SELECT * FROM t  WHERE (address,value_t) NOT IN (select address,max(value_t) AS value_t FROM t GROUP BY address)) 语句把不包含最大值的分组全部列出来,生成一个临时表,把表的别名为t2
    #最后就是求和了
    ###############################################################
      

  11.   

    如果不是要对每个分组进行求和的话,那么就是
    SELECT address,SUM(value_t) 
    FROM (SELECT * 
    FROM t 
    WHERE (address,value_t) NOT IN (select address,max(value_t) AS value_t FROM t GROUP BY address)) AS t2