首页 文章

oracle in section with rownum

提问于
浏览
1

我不是oracle专家,所以我希望有人可以帮我解决这个问题 .

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

  • 名字

  • 薪水

  • 国家

并且我想查询状态所在的前1000条记录(MA或NY或NH),我该怎么做?

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

现在的问题是,如果我最后使用rownum <1000,它将只找到所有结果并仅显示前1000个 . 但是我想看看IN子句中每个状态值的前1000个...有人可以建议正确的方法来做到这一点......

提前致谢...

2 回答

  • 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个值 .

  • 2

    用这个:

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

相关问题