获取ORACLE中的总行数,然后只获得4个结果

时间:2014-10-13 10:37:54

标签: sql oracle

我正在建立一个搜索引擎,因此,就像谷歌一样,我只显示4个结果,但我还需要匹配结果的总数。 我可以在ORACLE的单个查询中执行吗?

4 个答案:

答案 0 :(得分:2)

使用窗口功能:

select *
from (
  select col1, 
         col2,
         row_number() over (order by some_column) as rn,
         count(*) over () as total_count
  from the_table
) 
where rn <= 4;

但如果那张桌子真的很大,那就不会很快。

答案 1 :(得分:1)

您可以执行以下操作;

准备好运行查询:

        SELECT tbl2.*
  FROM (SELECT tbl1.*, ROWNUM rownumber
          FROM (SELECT 1, 2, count(*) FROM DUAL) tbl1) tbl2
 WHERE tbl2.rownumber BETWEEN 0 AND 4;

结果是:

column1|column2|COUNT(*)|ROWNUMBER
   1        2       1       1

这将获得0到4之间的行。因此,如果您想获取其他行,则可以修改以获取这些值的输入。

答案 2 :(得分:1)

从12c开始,您可以避免使用RANK方法,并直接使用TOP-N查询:

SQL> SELECT *
  2  FROM
  3    ( SELECT object_name,
  4      COUNT(*) OVER () AS total_count FROM all_objects
  5    )
  6  FETCH FIRST 5 ROWS ONLY
  7  /

OBJECT_NAME TOTAL_COUNT
----------- -----------
I_OBJ1            89738
CLU$              89738
I_COL3            89738
I_UNDO1           89738
I_CDEF4           89738

SQL>

答案 3 :(得分:0)

它不会使用单个SQL语句,但请查看APPROX_COUNT_DISTINCT()函数,该函数设计为一个非常快速的近似COUNT,用于搜索引擎等确切数量的结果是必不可少的。

http://docs.oracle.com/database/121/NEWFT/chapter12102.htm#BGBJEAJE