獲取mysql一組數據中的第N大的值


create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a',    2,   'a2')
insert into tb values('a',    1,   'a1')
insert into tb values('a',    3,   'a3')
insert into tb values('b',    1,   'b1')
insert into tb values('b',    3,   'b3')
insert into tb values('b',    2,   'b2')
insert into tb values('b',    4,   'b4')
insert into tb values('b',    5,   'b5')

SELECT * from tb

方法1:分組中第二大的數據 思路是:先獲取第二大的val,然后作為查詢條件 進行關聯自己,聯表查詢,使用linit可以獲取結果中任意位置的數據
select a.* from tb a where val = (select val from tb where name = a.name ORDER BY val desc LIMIT 1,1) order by a.name

方法2:分組中第二大的數據 思路是先獲取最大的值,然后進行關聯自己,聯表查詢
SELECT a.* FROM tb a WHERE val = (SELECT MAX(val) FROM tb WHERE val < (SELECT MAX(val) from tb WHERE name = a.name) and a.name = name )

 

再來個簡單的沒有分組,獲取第二大的數據

create table tb1(name varchar(10),val int,memo varchar(20))
insert into tb values('a',    2,   'a2')
insert into tb values('a',    1,   'a1')
insert into tb values('a',    3,   'a3')

SELECT * from tb1

//第二大的數據,不進行分組
SELECT a.* FROM tb1 a WHERE val = (SELECT MAX(val) FROM tb1 WHERE val < (SELECT MAX(val) from tb1))

 

 

 參考:http://www.manongjc.com/article/1082.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM