假设一个表有14行的员工,我想只选择3到10之间的中间行,那么它是如何完成的?
答案 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;