3

私は MySQL を使用しています。employee テーブルに 50 のレコードがあります。給与が22番目に高い人を見つけたいです。

4

5 に答える 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

LIMIT 21,1

列のn番目に高い値を見つける方法は?

列のn番目の最大値を見つけるためのクエリ

于 2013-02-06T06:59:03.813 に答える