SQL Server で、上位 5 つの給与を取得しようとしています。
私は次のような給料を持っています
5000
5000
4500
4500
3000
2000
1000
500
400
そして私は手に入れたい
5000
5000
4500
4500
3000
2000
1000
SQL Server で、上位 5 つの給与を取得しようとしています。
私は次のような給料を持っています
5000
5000
4500
4500
3000
2000
1000
500
400
そして私は手に入れたい
5000
5000
4500
4500
3000
2000
1000
SELECT TOP 5 salary FROM your_table
ORDER BY salary DESC
上位 5 つの個別の給与を取得したい場合 (同じ金額が何度表示されても)、DENSE_RANK()
ランキング関数と CTE を使用してこれを達成する必要があります。
DECLARE @salaries TABLE (salary DECIMAL(18,4))
INSERT INTO @salaries VALUES(5000)
INSERT INTO @salaries VALUES(5000)
INSERT INTO @salaries VALUES(4500)
INSERT INTO @salaries VALUES(4500)
INSERT INTO @salaries VALUES(3000)
INSERT INTO @salaries VALUES(2000)
INSERT INTO @salaries VALUES(1000)
INSERT INTO @salaries VALUES(500)
INSERT INTO @salaries VALUES(400)
;WITH SalariesRanked AS
(
SELECT
Salary,
SalaryNumber = DENSE_RANK() OVER(ORDER BY Salary DESC)
FROM
@salaries
)
SELECT salary
FROM SalariesRanked
WHERE SalaryNumber <= 5
これにより、次のような出力が得られます。
salary
5000.0000
5000.0000
4500.0000
4500.0000
3000.0000
2000.0000
1000.0000
select salary
from
(
select salary,
dense_rank() over(order by salary desc) as rn
from YourTable
) as T
where rn <= 5
SE-Dataを試す
TOP (Transact-SQL) の使い方を見てみましょう
SELECT TOP 5 Salary
FROM [Table]
GROUP BY Salary
ORDER BY Salary DESC
給与の重複を避けるために、クエリをグループ化する必要があります。