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