我有一个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
答案 0 :(得分:2)
select * from your_table
where salary in
(
select * from (select distinct salary from your_table order by salary desc limit 3) tmp
)
答案 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;