Вы можете преобразовать каждую строку в значение JSON, а затем сгруппировать по ключам значения json (которые являются именами столбцов):
select d.col,
count(*) filter (where value is null) as null_count,
count(*) filter (where value is not null) as not_null_count,
count(*) filter (where value = '') as empty
from the_table t
cross join jsonb_each_text(to_jsonb(t)) as d(col, value)
group by d.col;
Обратите внимание, что это будет намного медленнее, чем перечислять вручную каждый столбец, как вы.