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
还请高手继续指点,能分组求出数据总和及第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
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
-> 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>
测试了下面的代码,不对啊
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;
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解决问题了,不过同样谢谢你