SQL-如何基于行值选择前n行
我的标题可能不是很清楚;希望我能在这里讲得更有意义 我正在与Oracle数据库合作 我有一张叫EMPLOYEES的桌子 桌子上有一个叫做除法的词 每个员工都属于一个特定的部门 我想选择每个部门的前5名员工 例如,如果我的表看起来像:SQL-如何基于行值选择前n行,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,我的标题可能不是很清楚;希望我能在这里讲得更有意义 我正在与Oracle数据库合作 我有一张叫EMPLOYEES的桌子 桌子上有一个叫做除法的词 每个员工都属于一个特定的部门 我想选择每个部门的前5名员工 例如,如果我的表看起来像: EMPLOYEE_NO | DIVISION ---------------------- Mike | 1 John | 1 Peter | 3 Paul | 2 Mary |
EMPLOYEE_NO | DIVISION
----------------------
Mike | 1
John | 1
Peter | 3
Paul | 2
Mary | 1
Joanne | 2
Kristine | 3
Adam | 1
Brian | 3
Joel | 3
Amy | 2
Ben | 2
Ryan | 1
我希望能够查询该表,并从每个部门获得3名员工。因此,我的结果将类似于:
EMPLOYEE_NO | DIVISION
----------------------
Mike | 1
John | 1
Mary | 1
Joanne | 2
Amy | 2
Ben | 2
Kristine | 3
Brian | 3
Joel | 3
我不在乎是前3名成员,还是最后3名成员,或者是随机选择的3名成员。基本上,我希望从每个部门抽取员工样本
我已经发现了一个类似的问题:
但我担心的是,这个解决方案是否不适合拥有数百万条记录的数据库。我正在处理大约300万个REOCRD。您可以在子查询中使用分析函数:
select employee_no, division
from (
select employee_no, division,
row_number() over (partition by division) as rn
)
where rn <= 3
order by division, employee_no;
row_number() over (partition by division order by dbms_random.value) as rn