我正在使用 MySQL,我在员工表中有 50 条记录。我想找到薪水第 22 位的人。
问问题
781 次
5 回答
5
使用LIMIT
,同时指定偏移量和行数。
要按最高薪水的顺序获得第 22 位的人,请执行以下操作:
SELECT person
FROM employee
ORDER BY salary DESC
LIMIT 21, 1
注意21
这里的使用。这是因为初始行(第 1 高薪水)的偏移量实际上是 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
)
于 2013-02-06T06:58:55.110 回答
2
这是另一个,考虑到你有重复的工资号码。如果您有一些重复,我猜limit 将无法正确解决您的问题。试试这样的,
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 ║
╚═══════╩════════╝
于 2013-02-06T07:23:31.273 回答
1
SELECT MIN(salary) FROM (
SELECT DISTINCT salary FROM employee ORDER BY salary DESC LIMIT 22
) limited_salary
于 2019-04-03T18:29:07.867 回答
0
刚刚在这里回答了一个类似的问题: 选择所有行,除了最近的四个
在您的情况下,您需要将 LIMIT 限制为 1,并将 OFFSET 限制为 22 位置。
于 2013-02-06T06:58:37.487 回答
0
于 2013-02-06T06:59:03.813 回答