如何从 SQL 子句中存在的每个值中过滤特定数量的记录
How to filter specific number of records from each value present in clause in SQL
嗨
场景解释如下:
我有员工 table 拥有属于多个部门的所有员工详细信息的 100k 记录
员工 table 列如下:
EmpNumber EmpName ,EmpAge, DepartmentNumer , DepartmentName.
注意:每个部门可以有数百名员工。
问题:
如何从 where 子句 IN 运算符中指定的每个 DepartmentNumer 中仅过滤 10 条员工记录。
查询:
select * from Employee where DepartmentNumer in ( 'xxx' ,'yyyy') and AND ROWNUM <= 10;
上面的查询只返回 10 条属于 DepartmentNumer ='xxx' 的员工记录(因为员工 table 有数百条属于 DepartmentNumer =xxx 的记录,上面的查询没有返回来自 DepartmentNumer ='yyyy'
的任何记录
在Where子句'IN'匹配的情况下,如何从每个部门编号中过滤10条记录?
谢谢
使用row_number()
:
select e.*
from (select e.*,
row_number() over (partition by departmentnumber order by departmentnumber) as seqnum
from employee e
where DepartmentNumer in ('xxx', 'yyyy')
) e
where seqnum <= 10;
嗨 场景解释如下: 我有员工 table 拥有属于多个部门的所有员工详细信息的 100k 记录
员工 table 列如下: EmpNumber EmpName ,EmpAge, DepartmentNumer , DepartmentName.
注意:每个部门可以有数百名员工。
问题: 如何从 where 子句 IN 运算符中指定的每个 DepartmentNumer 中仅过滤 10 条员工记录。
查询: select * from Employee where DepartmentNumer in ( 'xxx' ,'yyyy') and AND ROWNUM <= 10;
上面的查询只返回 10 条属于 DepartmentNumer ='xxx' 的员工记录(因为员工 table 有数百条属于 DepartmentNumer =xxx 的记录,上面的查询没有返回来自 DepartmentNumer ='yyyy'
的任何记录在Where子句'IN'匹配的情况下,如何从每个部门编号中过滤10条记录?
谢谢
使用row_number()
:
select e.*
from (select e.*,
row_number() over (partition by departmentnumber order by departmentnumber) as seqnum
from employee e
where DepartmentNumer in ('xxx', 'yyyy')
) e
where seqnum <= 10;