Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-如何基于行值选择前n行_Sql_Oracle Sqldeveloper - Fatal编程技术网

SQL-如何基于行值选择前n行

SQL-如何基于行值选择前n行,sql,oracle-sqldeveloper,Sql,Oracle Sqldeveloper,我的标题可能不是很清楚;希望我能在这里讲得更有意义 我正在与Oracle数据库合作 我有一张叫EMPLOYEES的桌子 桌子上有一个叫做除法的词 每个员工都属于一个特定的部门 我想选择每个部门的前5名员工 例如,如果我的表看起来像: EMPLOYEE_NO | DIVISION ---------------------- Mike | 1 John | 1 Peter | 3 Paul | 2 Mary |

我的标题可能不是很清楚;希望我能在这里讲得更有意义

我正在与Oracle数据库合作

我有一张叫EMPLOYEES的桌子

桌子上有一个叫做除法的词

每个员工都属于一个特定的部门

我想选择每个部门的前5名员工

例如,如果我的表看起来像:

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