私は MySQL を使用しています。employee テーブルに 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番目に高い給与の人を取得するには、もう1つのレベルの間接参照が必要になります。試す:
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
給与番号が重複していることを考慮して、ここに別のものがあります。いくつかの重複がある場合、制限はあなたのケースを正しく解決しないと思います。このようなことを試してみてください。
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 に答える
0
ここで同様の質問に答えたところです。 最新の4行を除くすべての行を選択してください
あなたの場合、あなたは1に制限し、22の位置にオフセットしたいと思うでしょう。
于 2013-02-06T06:58:37.487 に答える
0
于 2013-02-06T06:59:03.813 に答える