Sql从where子句的每个值中选择n行

时间:2012-12-31 17:52:57

标签: sql oracle

示例:从EMPLOYEE中选择EMPLOYEENAME,其中的状态为('NY','CA','TX');

有没有办法从where子句中的每个值返回10行,即来自每个州的10个名称。

编辑:我正在使用Oracle DB。

2 个答案:

答案 0 :(得分:7)

 SELECT a.* FROM
 (
 select EMPLOYEENAME , 
 ROW_NUMBER() OVER(PARTITION BY state ORDER BY EMPLOYEENAME) as rn
 from EMPLOYEE where state in ('NY','CA','TX')
 )a WHERE rn <=10;

答案 1 :(得分:2)

select *  
from  
(  
    select foo,bar,  
    row_number() over(partition by baz)  rn     
    from table
    group by foo,bar
)  
where rn <= 10

使用row_number等分析函数可以根据某些条件进行分区。这基本上会覆盖oracle分配的默认rownum

如果您的关注点超过并发性,请记住读取将基于事务锁定,并且阻止插入/更新。