sql >> Databáze >  >> RDS >> PostgreSQL

postgresql - počet (žádné hodnoty null) každého sloupce v tabulce

Tento dotaz vytvoří příkaz DML, abyste získali to, co chcete.

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;

Vrátí:

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

Můžete jej také automaticky spustit. Ale ne v plánu SQL, potřebujete EXECUTE ve funkci plpgsql nebo DO (PostgreSQL 9.0 nebo novější).

Pro string_agg() také potřebujete Postgres 9.0 nebo novější funkce. Ve starších verzích můžete nahradit:array_to_string(array_agg(...), ', ') .

Možná vás zajímá speciální obsazení 'mytbl'::regclass . Přečtěte si více o typech identifikátorů objektů v příručce.

BTW:NULL hodnoty se nepřidávají do COUNT(col) ve výchozím nastavení.

Nahraďte mytbl názvem tabulky (kvalifikovaný pro schéma). . Ve vašem případě by to mělo být:

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

Pokud byste měli používat smíšená velká a malá písmena nebo jinak zmatené identifikátory (všimněte si uvozovek):

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


  1. Jak NOW() funguje v MariaDB

  2. 12c Změny DBA_USERS

  3. Zkontrolujte, zda v poli Postgres existuje hodnota

  4. Vyhledejte v poli JSON objekt obsahující hodnotu odpovídající vzoru