1

我想从 5 个成员组的表中获取数据。我怎样才能得到第 n 五个记录(第 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

请注意,如果第五名并列,则此查询将省略前六名或更多的薪水。例如:

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

130,000的薪水并列第五,因此前六名的薪水将有一个<= 5的排名。

如果您想包含 130,000 份工资中的一份(意味着您总是希望排除 5 份且只排除 5 份工资),请将RANK(Salary)查询中的替换为ROW_NUMBER(Salary)

于 2013-10-21T13:12:31.467 回答