oracle 10g,select子句

时间:2011-02-19 16:22:24

标签: sql oracle oracle10g

假设一个表有14行的员工,我想只选择3到10之间的中间行,那么它是如何完成的?

4 个答案:

答案 0 :(得分:4)

首先,您必须定义排序。没有排序,“3到10之间的中间行”是没有意义的。当您知道排序时,您可以使用与RC建议几乎相同的查询:

select *
  from ( select e.*
              , rownum rn
           from emp e
          order by <your ordering columns here>
       )
 where rn between 3 and 10

的问候,
罗布。

答案 1 :(得分:2)

SELECT * FROM (SELECT e.*, rownum r FROM emp e) WHERE r BETWEEN 3 AND 10;

答案 2 :(得分:0)

如果要查找行的随机抽样,可以使用sample子句。然而,它基于百分比。

从表格样本(5)中选择*; - 5%

答案 3 :(得分:0)

如果您的要求是“除了前3和后3之外的所有行”,无论表中的行数如何,您都可以使用:

select * from (
  select emp.*,
         row_number() over (order by id) n,
         count(*) over () c
  from emp)
where n between 4 and c - 4;

如果你的要求是“获得除前20%和最低20%之外的所有行”,你可以使用:

select * from (
  select emp.*,
         ntile(5) over (order by id) n,
         count(*) over () c
  from emp)
where n between 2 and 4;