oracle SQL使用ROWNUM选择分页查询中的结果总数

huwehgph  于 2023-05-22  发布在  Oracle
关注(0)|答案(1)|浏览(130)

我想弄清楚,如果没有使用ROWNUM值分页,是否可以在单个查询中选择查询结果的总数。我的表非常简单,只有这3列(ID,DESCRIPTION,NAME)

select  ID, DESCRIPTION, NAME
  from ( select  ID, DESCRIPTION, NAME, ROWNUM as rnum 
      from TESTDATAITEM where DESCRIPTION = 'test' and NAME = 'foo' 
      order by ID )
  a where rnum between 0 AND 9 order by rnum

这是我的java后端与myBatis一起运行的查询,以将第一页(10个结果)返回到React UI,而相反,如果不限制“rnum between 0 AND 9”,则结果总数将是数百个。
有没有一种方法可以获得同一查询中的结果总数信息,或者最好的方法是运行另一个查询,而不将结果限制在0到9之间?
我尝试为TOTALRESULTS添加一个count()和一个group by,但它并不像我想象的那样工作

select TOTALRESULTS, ID, DESCRIPTION, NAME
 from ( select count(*) as TOTALRESULTS, ID, DESCRIPTION, NAME, ROWNUM as rnum 
     from TESTDATAITEM where DESCRIPTION = 'TEST' and NAME = 'TEST_NAME' 
     group by ID, NAME, ROWNUM
     order by ID )
 a where rnum between 0 AND 9 order by rnum

PS我需要使用ROWNUM,虽然它的丑陋(而不是LIMIT /OFFSET)的原因有一个旧版本的oracle
谢谢

8wigbo56

8wigbo561#

您可以在整个结果集上使用count的分析版本:

select count(*) over () as TOTALRESULTS

给你(一些虚拟的样本数据):

select TOTALRESULTS, ID, DESCRIPTION, NAME
  from ( select count(*) over () as TOTALRESULTS, ID, DESCRIPTION, NAME, ROWNUM as rnum 
      from TESTDATAITEM where DESCRIPTION = 'test' and NAME = 'foo'
      order by ID )
  a where rnum between 0 AND 9 order by rnum
总结果ID说明名称
九九1测试
九九2测试
九九3测试
九九测试
九九5测试
九九测试
九九测试
九九测试
九九测试

fiddle

相关问题