如何在oracle 12c中对单个选择内的每个远程分区记录进行计数?

Scr*_*Dev 4 sql oracle oracle12c

我正在寻找的解决方案(如果存在)是直接按实际分区而不是计算值进行分区。

表伪代码:

create table table_1 as (part_col DATE, val_col VARCHAR2(1))
partition by range part_col (
   PARTITION t_20160515 VALUES LESS THAN (TO_DATE('2016-05-15','YYYY-MM-DD'))
   PARTITION t_20160516 VALUES LESS THAN (TO_DATE('2016-05-16','YYYY-MM-DD'))
   ...
);
Run Code Online (Sandbox Code Playgroud)

选择伪代码:

select partition as P, count(*) as C from table_1
group by partition;
Run Code Online (Sandbox Code Playgroud)

所需结果

  P        |  C
-----------|-----
2016-05-15 | 8
2016-05-16 | 99
Run Code Online (Sandbox Code Playgroud)

可行,但不是我要的东西:

select trunc(part_col) P, count(*) C from table_1;
Run Code Online (Sandbox Code Playgroud)

xQb*_*ert 5

运行此命令以为每个分区生成一组选择

SELECT 'SELECT ' || chr(39) || partition_Name || chr(39) || ', count(*) 
        FROM ' ||table_name ||' partition (' || partition_name || 
        ') UNION ALL ' as test 
FROM all_tab_partitions 
WHERE table_Name = 'Table_1'
Run Code Online (Sandbox Code Playgroud)

结果如下:

SELECT 'P1', count(*) FROM Table_1 partition (P1) UNION ALL 
SELECT 'P2', count(*) FROM Table_1 partition (P2) UNION ALL 
SELECT 'P3', count(*) FROM Table_1 partition (P3) UNION ALL 
SELECT 'P4', count(*) FROM Table_1 partition (P4) UNION ALL 
SELECT 'P5', count(*) FROM Table_1 partition (P5) UNION ALL
Run Code Online (Sandbox Code Playgroud)

复制并粘贴结果,删除所有的最后一个并集,然后运行。不太确定性能...我打了一个有5个分区的表,它只用了5百万左右的时间就完成了大约2秒的总行数。