Count

Shows the distinct values of [column] within [table], e.g. "@count object_type all_objects", which is the same as "SELECT object_type, COUNT(*) FROM all_objects GROUP BY object_type", but less typing.

-- count.sql
-- Report the distinct values of [column] within [table]
-- [column] and [table] can be expressions, e.g. @count NVL(a,b) "c WHERE d = e"
-- William Robertson: www.williamrobertson.net
--
-- e.g:
-- @count active_yn subscribers
--
-- A COUNT(*)
-- - --------
-- N    39712
-- Y     5830
--      46060
--
-- Also since SQL*Plus positional params are whitespace-delimited,
-- @count col1,col2 tablename
-- also works (&1 = "col1,col2", &2 = "tablename").
--
-- Tip:
-- Since SQL*Plus stores parameters as environment variables, you can omit the
-- second parameter in subsequent queries for the same table: e.g. following the
-- example above, 'table' is already defined in the SQL*Plus session, so you could
-- type:
-- @count ttn_ind
-- This goes for percent.sql as well.

col proportion format 990 hea "%"

DEF column = "&1"
DEF table = "&2"

select &column
     , count(*) total
     , 100 * ratio_to_report(count(*)) over () as proportion
from &table
group by &column
order by 1, 2
/