SELECT segment_type, SUM(bytes) bytes, CUME_DIST() OVER (ORDER BY SUM(bytes)) bytes_percentile FROM sys.dba_segments GROUP BY segment_type; -- SELECT * FROM (SELECT segment_type, SUM(bytes) bytes, CUME_DIST() OVER (ORDER BY SUM(bytes)) bytes_percentile FROM sys.dba_segments GROUP BY segment_type) WHERE bytes_percentile >= 0.5; -- SELECT * FROM ( SELECT owner, SUM(bytes) bytes, RANK() OVER(ORDER BY SUM(bytes) DESC) bytes_rank FROM sys.dba_segments WHERE segment_type IN (SELECT segment_type FROM (SELECT segment_type, SUM(bytes) bytes, CUME_DIST() OVER (ORDER BY SUM(bytes)) bytes_percentile FROM sys.dba_segments GROUP BY segment_type) WHERE bytes_percentile >= 0.5) GROUP BY owner ) WHERE bytes_rank <=5;