oracle in section with rownum

时间:2015-12-11 17:39:31

标签: sql oracle

我不是甲骨文专家,所以我希望有人可以帮我解决这个问题。

我有一个场景,我需要从表中查询前1000个记录,我的查询已经有where子句的where子句。例如,假设有一个名为employee的表,它有4列

  • 姓名
  • 薪水
  • 状态
  • 国家

我希望查询状态为(MA或NY或NH)的前1000条记录,我该怎么做?

select name, salary
from Employee
where state IN ('MA','NY','NH')

现在的问题是,如果我使用rownum< 1000最后,它只是找到所有结果,只显示前1000名。但我想看看IN条款中每个州的前1000名...有人可以建议正确的方法来做到这一点...

提前致谢...

2 个答案:

答案 0 :(得分:2)

您想使用row_number()

select e.name, e.salary
from (select e.*, row_number() over (partition by state order by state) as seqnum
      from employee e
      where state in ('MA', 'NY', 'NH')
     ) e
where seqnum <= 1000;

我不确定“每个州的前1000名”是什么意思。您的问题中没有订购或建议订购。而且,SQL表本质上是无序的。这将从不确定的行返回每个状态的1000个值。

答案 1 :(得分:2)

使用此:

Select name, salary
from Employee
where state IN ('MA','NY','NH')
Group by state
HAVING Count(*) <=1000
Order by state