我正在使用MySQL,我在employee表中有50条记录。我想找到薪水最高的人。
答案 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)