sql >> Base de Datos >  >> RDS >> PostgreSQL

postgresql - recuento (sin valores nulos) de cada columna en una tabla

Esta consulta creará la instrucción DML para obtener lo que desea.

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;

Devoluciones:

SELECT count(col1), count(col2), count(col3), ...
FROM   mytbl

También puede ejecutarlo automáticamente. Pero no en plan SQL, necesita EXECUTE en una función plpgsql o DO declaración (PostgreSQL 9.0 o posterior) para eso.

También necesita Postgres 9.0 o posterior para string_agg() función. En versiones anteriores, puede sustituir:array_to_string(array_agg(...), ', ') .

Quizás te preguntes sobre el elenco especial 'mytbl'::regclass . Lea más sobre los tipos de identificadores de objetos en el manual.

Por cierto:NULL los valores no se suman a COUNT(col) por defecto.

Sustituya el nombre de la tabla (calificado por esquema) por mytbl . En su caso, debería ser:

...
WHERE  attrelid = 'geoproject.mes_wastab'::regclass
...

Si debe usar mayúsculas y minúsculas o identificadores desordenados (tenga en cuenta las comillas):

...
WHERE  attrelid = '"gEopRoject"."MES_wastab"'::regclass
...