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

Sql从where子句的每个值中选取n行,sql,oracle,Sql,Oracle,示例:从状态为“NY”、“CA”、“TX”的雇员中选择EMPLOYEENAME 是否有任何方法可以从where子句中的每个值返回10行,即从每个状态返回10个名称 编辑:我正在使用Oracle数据库 select * from ( select foo,bar, row_number() over(partition by baz) rn from table group by foo,bar ) where rn <= 10

示例:从状态为“NY”、“CA”、“TX”的雇员中选择EMPLOYEENAME

是否有任何方法可以从where子句中的每个值返回10行,即从每个状态返回10个名称

编辑:我正在使用Oracle数据库

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

如果您担心的是并发性,请记住,读取将基于事务锁定,并且不会阻止插入/更新

 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;
使用诸如row_number之类的分析函数允许基于某些标准进行分区。这将实质上覆盖oracle分配的默认rownum


如果您担心的是并发性,请记住,读取将基于事务锁定,并且不会阻止插入/更新

什么RDMS?它们中的许多都有窗口函数,使您的任务变得非常容易。工会是不可伸缩的。where子句中的值是什么RDM?它们中的许多都有窗口函数,使您的任务变得非常容易。工会是不可伸缩的。价值观,其中子句不是OP想要的。不是总共N行,而是每个组的N行,但这里的东西只是每个状态值的X行,而不是作为一个整体,这不是OP想要的。不是总共N行,而是每个组的N行,但这里的内容只是每个状态值的X行,而不是作为一个整体,取决于行数。如果在选择数据时发生插入和更新,则会出现问题?@javachecker读取将根据事务锁定。如果需要,由您来正确实现锁定。+1可能希望向SELECT子句添加状态,但在其他方面很好。@a1ex07谢谢您的回答。您能解释一下分区是如何在这里发挥作用的吗?@javache:partitionbystate确保每个状态的行数都以1开头;因此,如果在选择数据时发生插入和更新,您可以使用where rn is not dependent on row_number作为问题?@javachecker读取将根据事务锁定。如果需要,由您来正确实现锁定。+1可能希望向SELECT子句添加状态,但在其他方面很好。@a1ex07谢谢您的回答。您能解释一下分区是如何在这里发挥作用的吗?@javache:partitionbystate确保每个状态的行数都以1开头;因此,您可以使用where-rn
 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;