mysql选择前3个最大值的所有记录

时间:2018-01-12 09:40:41

标签: mysql

我有一个mysql表,我希望获得最高3个工资的所有记录。

userid    salary
1           10
2           20
3           20
4           30
5           10
6           50  
7           40
8           50
9           30
10          20

结果应该是所有具有3个最大值的记录,即:

userid    salary
8           50
6           50
7           40
9           30
4           30

2 个答案:

答案 0 :(得分:2)

select * from your_table
where salary in 
(
   select * from (select distinct salary from your_table order by salary desc limit 3) tmp
)

SQLFiddle demo

答案 1 :(得分:0)

你也可以这样做......

SELECT t.*
  FROM t 
 WHERE FIND_IN_SET(salary,(SELECT GROUP_CONCAT(salary ORDER BY salary DESC) FROM t))  <= 4
 ORDER 
    BY salary DESC
     , userid DESC;

......虽然我怀疑这更快......

SELECT userid
     , salary
  FROM
     ( SELECT t.*
            , CASE WHEN @prev = salary THEN @i:=@i ELSE @i:=@i+1 END rank
            , @prev := salary
         FROM t
            , (SELECT @i:=0, @prev:=null) vars
        ORDER 
           BY salary DESC
            , userid DESC
     ) x
 WHERE rank <= 3;