执行查询和查询计数

时间:2019-03-07 13:51:43

标签: sql oracle

我正在尝试构建查询或PL / SQL代码以执行查询并返回该查询的结果数量。

在单个查询中有可能吗?现在,我感觉自己非常浪费:我先将查询包装在COUNT中(不带ORDER BY),然后再次运行相同的查询(不带COUNT)。相差几秒钟可能不会改变总行数,我可以接受。 我正在使用的数据库是Oracle Enterprise 12.2

3 个答案:

答案 0 :(得分:7)

一种简单的SQL方式: 测试表:

create table testTable(a, b, c) as (
    select 1, 'one',   'XX' from dual UNION ALL
    select 2, 'two',   'YY' from dual UNION ALL
    select 3, 'three', 'ZZ' from dual
)

一个简单的查询:

select a, b, c
from testTable 

         A B     C 
---------- ----- --
         1 one   XX
         2 two   YY
         3 three ZZ

3 rows selected.

具有记录数的查询:

select a, b, c, count(*) over (partition by 1) as count
from testTable


         A B     C       COUNT
---------- ----- -- ----------
         1 one   XX          3
         2 two   YY          3
         3 three ZZ          3

3 rows selected.

答案 1 :(得分:1)

您可以尝试执行以下操作:

WITH test_query
  AS (SELECT LEVEL just_a_number
        FROM dual
       CONNECT BY level < 101)
SELECT just_a_number
     , COUNT(just_a_number) OVER (ORDER BY 1) total_count
  FROM test_query;

COUNT(just_a_number) OVER (ORDER BY 1)将返回每行中提取的总行数。请注意,这可能会降低查询速度。

答案 2 :(得分:1)

通常,当我做这样的事情时,我创建一个存储过程,该过程返回2个值。第一个是将结果集设置为REF CURSOR,另一个将是返回计数的数字(12,0)。两者当然都需要单独的查询,但是由于它在单个存储过程中,因此它只是一个数据库连接和正在执行的命令。

您当然可以通过COUNT查询来放弃ORDER BY子句。

要回答您的问题,您本身并不是在浪费。这是企业软件中的常见做法。

相关问题