select table_owner||'.'||table_name,partition_name,100* (round (num_rows/ case when sum(num_rows) over( partition by table_name) >0 then sum(num_rows) over( partition by table_name) else 1 end ,3)) as pct_of_rows ,num_rows, sum(num_rows) over( partition by table_name) total_row_cnt from dba_tab_partitions where table_name in ( select table_name from DBA_PART_TABLES dpt where dpt.owner not like 'SYS%' and dpt.interval is null and dpt.partitioning_type like '%RANGE%' ) order by 1,3 desc nulls last; TABLE_NAME | PARTITION_NAME | PCT_OF_ROWS | NUM_ROWS | TOTAL_ROW_CNT ---------------------------------------- | ------------------------------ | ----------- | ---------- | ------------- XXXX.OPN_HIS | P_MAX | 100 | 63308846 | 63309145 XXXX.OPN_HIS | P_2012_09 | 0 | 2 | 63309145 XXXX.OPN_HIS | P_2012_10 | 0 | 297 | 63309145 XXXX.OPN_HIS | P_2012_08 | <NULL> | <NULL> | 63309145