存在表T(a,b,c,d),要根据字段c倒序排列后取第21~30条记录显示,请给出SQL。
create table T(
a number(2),
b number(2),
c number(3),
d number(2)
);
insert into T (a, b, c, d) values (1, 2, 1, 4);
insert into T (a, b, c, d) values (1, 2, 2, 4);
insert into T (a, b, c, d) values (1, 2, 3, 4);
insert into T (a, b, c, d) values (1, 2, 4, 4);
insert into T (a, b, c, d) values (1, 2, 5, 4);
insert into T (a, b, c, d) values (1, 2, 6, 4);
insert into T (a, b, c, d) values (1, 2, 7, 4);
commit;

SELECT *
FROM (
SELECT t.*, ROWNUM rn
FROM (
SELECT *
FROM T
ORDER BY c DESC
) t
WHERE ROWNUM <= 30
)
WHERE rn >= 21;
SELECT *
FROM (
SELECT t.*, ROW_NUMBER() OVER (ORDER BY c DESC) rn
FROM T t
)
WHERE rn BETWEEN 21 AND 30;
推荐使用第二种方式,因为
:
1.语法更清晰易读
2.性能通常更好
3.是标准的SQL语法,兼容性更好
两种方式都会:
1.先按字段c降序排列所有记录
2.为排序后的记录添加行号
3.筛选出行号在21到30之间的记录


被折叠的 条评论
为什么被折叠?



