-- Find value with the [n] most occurrences, e.g: -- -- SQL> @most object_type dba_objects -- -- OBJECT_TYPE TOTAL -- ------------------ ---------- -- INDEX 7225 -- -- SQL> @most object_type dba_objects 3 -- -- OBJECT_TYPE TOTAL -- ------------------ ---------- -- INDEX 7225 -- TABLE 4522 -- VIEW 2724 -- -- Parameter &3 is redefined as bind variable :limit which defaults to 1. -- Note that "&1" can be any valid column list, most easily specified by omitting -- spaces (though double-quotes would also work) -- -- SQL> @most owner,object_type dba_objects -- -- OWNER OBJECT_TYPE TOTAL -- ------------------------------ ------------------ ---------- -- SYS VIEW 1910 -- -- Likewise "&2" can be any valid expression equivalent to a table etc etc -- -- load_params.sql initialises default parameters in SQL*Plus - see -- http://www.williamrobertson.net/code/load_params.sql.txt -- William Robertson, www.williamrobertson.net set term off autoprint off serveroutput on @load_params def column = &1 def table = &2 def limit = &3 var limit number var plural varchar2(1) store set sqlplus_settings.sql replace set term on feed off begin :limit := nvl('&3',1); if :limit > 1 then :plural := 's'; end if; dbms_output.put_line('Results limited to ' || :limit || ' row' || :plural); end; / col value hea dummy col value clear select value , total from ( select &1 as value , count(*) as total from &2 group by &1 order by total desc ) where rownum <= :limit / undef 2 undef 3 undef 4 @sqlplus_settings.sql set term on prompt