譬如表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
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中的第三大值
解决方案 »
- 存储引擎的更改
- 高人进!group by求和问题
- 怎么随机取表里面的某一条记录
- 统计记录数
- mysql是否免費?
- 求教:FreeBSD下MySQL的安装配置问题
- 求大虾 Sql语句............
- 在postgresql中如何将一个Integer的字段in到另一个integer[]类型的字段中?
- 关于MySQL中数据类型的问题。
- phpMyAdmin操作提示:phpMyAdmin - error #2005 - Unknown MySQL server host 'localho
- mysql where in 语句很慢,求助
- Lost connection to MySQL server at 'reading initial communication packet'
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.a2的B也应该为0.6?
[征集]分组取最大N条记录方法征集,及散分....
(
select *
from tb
group by A
)tb3 left join
(
select A,B
from tb tb1
where (select count(*) from tb tb2 where tb1.A=tb2.A and tb1.B>tb2.B)=2
)tb4 on tb3.A=tb4.A