请教MySQL或其它数据库高手,怎么分组查询第三大值,类似使用max()查询最大值?

譬如表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中的第三大值

查询第三大值:select A, max(B) as thirdB from test
where B not in (select top 2 B from test order by B desc)
--这里就把第一、二大的数去掉了
group by A;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-27
SQL Server / Oracle 的话,很好处理。
一个 ROW_NUMBER() OVER(PARTITION BY A ORDER BY B DESC) 一下。
然后这个数字 = 3的, 就是分组第三大值了。

MySQL 不知道支持不支持追问

可惜Mysql不支持

第2个回答  2011-05-27
写自定义函数吧
相似回答