PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

postgresql - contagem (sem valores nulos) de cada coluna em uma tabela


Essa consulta criará a instrução DML para obter o que você deseja.
SELECT 'SELECT ' || string_agg('count(' || quote_ident(attname) || ')', ', ')
    || 'FROM '   || attrelid::regclass
FROM   pg_attribute
WHERE  attrelid = 'mytbl'::regclass
AND    attnum  >= 1           -- exclude tableoid & friends (neg. attnum)
AND    attisdropped is FALSE  -- exclude deleted columns
GROUP  BY attrelid;

Devoluções:
SELECT count(col1), count(col2), count(col3), ...
FROM   mytbl

Você também pode executá-lo automaticamente. Mas não no plano SQL, você precisa de EXECUTE em uma função plpgsql ou DO instrução (PostgreSQL 9.0 ou posterior) para isso.

Você também precisa do Postgres 9.0 ou posterior para o string_agg() função. Em versões mais antigas, você pode substituir:array_to_string(array_agg(...), ', ') .

Você pode se perguntar sobre o elenco especial 'mytbl'::regclass . Leia mais sobre os tipos de identificador de objeto no manual.

BTW:NULL os valores não são adicionados a COUNT(col) por padrão.

Substitua o nome da tabela (qualificada pelo esquema) por mytbl . No seu caso deveria ser:
...
WHERE  attrelid = 'geoproject.mes_wastab'::regclass
...

Se você deve usar maiúsculas e minúsculas ou identificadores confusos (observe as aspas):
...
WHERE  attrelid = '"gEopRoject"."MES_wastab"'::regclass
...