【问题标题】:oracle in clause along with rownumoracle in 子句和 rownum
【发布时间】:2015-12-11 17:39:30
【问题描述】:

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

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

  • 姓名
  • 工资
  • 状态
  • 国家

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

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

现在的问题是,如果我最后使用 rownum

提前谢谢...

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    你想使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-15
        • 2011-07-21
        • 1970-01-01
        • 2020-08-15
        • 2016-04-25
        相关资源
        最近更新 更多