http://topic.csdn.net/u/20110527/08/1ed54d6e-68c4-4b2b-9c5c-798a0767aab9.html?1062
譬如表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 thirdB
1 0.6
2 2.3
3 null我知道查询最大值时可以用以下语句实现
select A, max(B) as thirdB from test group by A;
怎么用尽可能简单的方式查询第三大值?
注意A栏中数据是随机的,没法直接按A栏中的数据用limit查询B中的第三大值
如果希望同时输出按A分组后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.   

    SELECT DISTINCT a.a,b.b,(SELECT SUM(b) FROM ttqp WHERE a=a.a) 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
      

  3.   

    我自己搞定了,这样就行
    SELECT a.a,sum(a.b),b.b FROM test a LEFT JOIN (  
    SELECT a.A,a.B FROM test a LEFT JOIN test 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 group by a.a