sql >> Database teknologi >  >> RDS >> PostgreSQL

postgresql - antal (ingen null-værdier) af hver kolonne i en tabel

Denne forespørgsel vil oprette DML-sætningen for at få det, du ønsker.

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;

Returnerer:

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

Du kan også udføre det automatisk. Men ikke i plan SQL, du skal bruge EXECUTE i en plpgsql-funktion eller DO sætning (PostgreSQL 9.0 eller nyere) for det.

Du skal også bruge Postgres 9.0 eller nyere til string_agg() fungere. I ældre versioner kan du erstatte:array_to_string(array_agg(...), ', ') .

Du undrer dig måske over den særlige cast 'mytbl'::regclass . Læs mere om objektidentifikatortyper i manualen.

BTW:NULL værdier føjes ikke til COUNT(col) som standard.

Erstat det (skema-kvalificerede) tabelnavn med mytbl . I dit tilfælde skulle det være:

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

Hvis du skulle bruge blandede store og små bogstaver eller på anden måde rodede identifikatorer (bemærk citaterne):

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


  1. Beregn løbende total / løbende balance

  2. Værdi Fejl under import af data til postgres-tabellen ved hjælp af psycopg2

  3. JDBC Batch-indsæt undtagelseshåndtering

  4. Adgang til en anden brugers tabel i en Oracle Stored Procedure