示例:从EMPLOYEE中选择EMPLOYEENAME,其中的状态为('NY','CA','TX');
有没有办法从where子句中的每个值返回10行,即来自每个州的10个名称。
编辑:我正在使用Oracle DB。
答案 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
。
如果您的关注点超过并发性,请记住读取将基于事务锁定,并且不阻止插入/更新。