我不是甲骨文专家,所以我希望有人可以帮我解决这个问题。
我有一个场景,我需要从表中查询前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名...有人可以建议正确的方法来做到这一点...
提前致谢...
答案 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