我想从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的新手,只是要求你给我一个提示,而不是要求完整的代码。
答案 0 :(得分: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个工资中的一个(意味着您总是想要排除五个且只有五个工资),请将查询中的RANK(Salary)
替换为ROW_NUMBER(Salary)