http://topic.csdn.net/u/20110527/08/1ed54d6e-68c4-4b2b-9c5c-798a0767aab9.html?78791http://topic.csdn.net/u/20110527/10/1922ad1d-023b-4c44-868a-26fc8cc6a35c.html?35154早上没仔细看,这样查询出来的第三大值,相同的值只记了一次,比如有四个数据, 5,5,4,3,这样查询出来的第三大值为3,其实我需要的值是4。
还请高手继续指点,能分组求出数据总和及第N大值,N>1。
原始问题和解决方法如下:
譬如表test内容如下
A B
1 1.1
1 0.5
2 0.6
1 3.1
2 2.3
3 2.4
2 6.7
1 0.5
1 0.6现在需要按A栏分组查询B栏中的第三大值,譬如A=1时,B中的第三大值为0.6,如果B栏中数据少于三个,第三大值为空
需要的输出结果如下
A sumB thirdB
1 5.8 0.6
2 9.6 0.6
3 2.4 null

解决方案 »

  1.   

    wwwwb的方法查询出的是第三大不同的值
    SELECT DISTINCT a.a,b.b FROM ttqp a LEFT JOIN (   
    SELECT a.A,a.B FROM ttqp a LEFT JOIN ttqp b ON a.a=b.a AND a.b<=b.b GROUP BY a.A,a.B HAVING COUNT(DISTINCT b.b)=3) b
    ON a.a=b.a
      

  2.   

    看不懂楼主的这个2 9.6 0.6是怎么来的。mysql> select a.a,a.b,b.b
        -> from (select a,sum(b) as b from test group by a) a
        -> left join (
        -> select distinct a,b
        -> from test t
        -> where (select count(*) from test where a=t.a and b<t.b)<3
        -> and  (select count(*) from test where a=t.a and b<=t.b)>=3
        -> ) b on a.a=b.a;
    +------+------+------+
    | a    | b    | b    |
    +------+------+------+
    |    1 |  5.8 |  0.6 |
    |    2 |  9.6 |  6.7 |
    |    3 |  2.4 | NULL |
    +------+------+------+
    3 rows in set (0.07 sec)mysql>
      

  3.   

    a=2时,sum(b)=9.6, 0.6是a=2时第三大值
    测试了下面的代码,不对啊
      

  4.   

    SET @num1=0;
    SET @aa=0;
    SELECT a.a,SUM(a.B),MAX(c.b) FROM ttqp a LEFT JOIN
    (
    SELECT a,b FROM (
    SELECT *,@num1:=IF(@aa=a,@num1+1,1) AS pm,@aa:=a AS pm1 FROM ttqp ORDER BY a,b DESC) a WHERE pm=3) c
    ON a.a=c.a
    GROUP BY a.a;
      

  5.   

    A B
    1 1.1
    1 0.5
    2 0.6
    1 3.1
    2 2.3
    3 2.4
    2 6.7
    1 0.5
    1 0.6a=2时,从大到小6.7, 2.3, 0.6,第三大值不是0.6? 
    WWWWA解决问题了,不过同样谢谢你