【发布时间】:2013-10-23 02:52:37
【问题描述】:
我有以下查询记录分页
SELECT *
FROM (SELECT e.*,
ROWNUM row_num
FROM (SELECT emp_no,
emp_name,
dob
from emp) outr
WHERE ROWNUM < ( (pagenum * row_size) + 1))
WHERE row_num >= ( ( (pagenum - 1) * row_size) + 1)
我也想在同一个查询中获取行数,为此我已经尝试过 使用
COUNT(*) OVER ()
但是,当我分页到下一组页面和行时,我没有得到准确的结果。
如何有效地使用COUNT(*) OVER ()?
【问题讨论】:
-
请提供数据样本和所需输出。
-
您应该将 COUNT(*) 放在最里面的查询中:
SELECT emp_no, emp_name, dob, COUNT(*) FROM emp。当然,这样每次获取下一页的记录时,您都必须计算所有行。我想您不想一次获取行数? -
@PrzemyslawKruglej 您能否解释一下我想您不想一次获取行数的确切含义?
-
我的意思是先获取行数,不要再这样做了——保留值。当然,这样你可能无法在用户浏览结果页面时显示一些可以添加的记录,但是如果你从中获取数据的表很大,那么每次计算记录可能会影响性能。
-
@PrzemyslawKruglej 是的,现在我明白了。谢谢。所以如果表很大,
count(*) over ()会对性能产生影响,不是吗?那么最好的解决方案是在两个单独的查询中执行?
标签: sql oracle pagination oracle10g