1

5つのメンバーグループのテーブルからデータを取得したい. n 番目の 5 つのレコード (n 番目のグループ) を取得するにはどうすればよいですか。(n-1)*5 と (n)*5 の間のレコードを意味します。

マシンで 2 つのクエリを実行するたびに、この下のフォームで自分のレコードを見つけるのは好きではありません。

SELECT MAX(Salary) as 'Salary' from EmployeeDetails
where Salary NOT IN
(
SELECT TOP n-1 (SALARY) from EmployeeDetails ORDER BY Salary Desc
)

注:私はOracleの初心者であり、完全なコードを尋ねるのではなく、これについてのヒントを教えてください.

4

1 に答える 1

1

これは、Oracle 11 (および 10 と私は 9 でさえあると思います) で機能します。

SELECT MAX(Salary) AS MaxSal
FROM (
  SELECT
    Salary,
    RANK(Salary) OVER (ORDER BY Salary DESC) AS SalRank
  FROM EmployeeDetails
)
WHERE SalRank > 5

5 位が同点の場合、このクエリでは上位 6 位以上の給与が除外されることに注意してください。例えば:

Salary SalRank
------ -------
150000       1
145000       2
140000       3
135000       4
130000       5
130000       5
125000       7

130,000 の給与は 5 位に並んでいるため、上位 6 人の給与のランクは 5 以下になります。

130,000 人の給与の 1 つを含める場合 (つまり、常に5 つの給与のみを除外する必要があることを意味します)、RANK(Salary)クエリ内の をに置き換えますROW_NUMBER(Salary)

于 2013-10-21T13:12:31.467 に答える