我想找到薪水最高的人

时间:2013-02-06 06:56:38

标签: mysql

我正在使用MySQL,我在employee表中有50条记录。我想找到薪水最高的人。

5 个答案:

答案 0 :(得分:5)

使用LIMIT,指定偏移量和行数。

为了获得最高薪水排名第22位的人,请执行:

SELECT person
FROM employee
ORDER BY salary DESC
LIMIT 21, 1

请注意此处使用21。这是因为初始行(第一个最高工资)的偏移实际上是0.因此,第22个最高工资实际上是21的偏移(从0开始计数的第21行,或“跳过21行”)。


要获得第22个最高薪水的人,您将需要一个更多级别的间接。尝试:

SELECT person
FROM employee
WHERE salary = (
    SELECT DISTINCT salary
    FROM employee
    ORDER BY salary DESC
    LIMIT 21, 1
)

答案 1 :(得分:2)

这是另一个,考虑到你有重复的工资号码。 我猜限制将无法解决您的情况,如果您有一些重复。试试这样的事情,

SELECT aa.*
FROM   table1 aa
       INNER JOIN
        (
          SELECT @row:=@row+1 rankNo,
                 a.Salary
          FROM   (SELECT DISTINCT Salary FROM table1) a, 
                 (SELECT @row:=0) s
          ORDER  BY Salary DESC
        ) bb ON aa.Salary = bb.Salary AND
                bb.rankNo = 2

考虑你有这样的记录,

CREATE TABLE Table1
    (`EmpID` int, `Salary` int);

INSERT INTO Table1
    (`EmpID`, `Salary`)
VALUES
    (1, 10),
    (2, 12),  -- duplicate
    (3, 11),
    (4, 12),  -- duplicate
    (5, 14),
    (6, 12);  -- duplicate

╔═══════╦════════╗
║ EMPID ║ SALARY ║
╠═══════╬════════╣
║     1 ║     10 ║
║     2 ║     12 ║
║     3 ║     11 ║  -- you want to get this value (*2nd from the last value*)
║     4 ║     12 ║
║     5 ║     14 ║
║     6 ║     12 ║
╚═══════╩════════╝

答案 2 :(得分:1)

SELECT MIN(salary) FROM (
    SELECT DISTINCT salary  FROM employee ORDER BY salary DESC LIMIT 22
) limited_salary

答案 3 :(得分:0)

刚刚在这里回答了类似的问题:select all rows except the four most recent

在你的情况下,你需要LIMIT为1,OFFSET为22位。

答案 4 :(得分:0)