sql >> データベース >  >> RDS >> PostgreSQL

postgresql-テーブルの各列のカウント(null値なし)

    このクエリは、必要なものを取得するためのDMLステートメントを作成します。

    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;
    

    返品:

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

    自動的に実行することもできます。ただし、プランSQLにはないため、EXECUTEが必要です。 plpgsql関数またはDO そのためのステートメント(PostgreSQL 9.0以降)。

    string_agg()にはPostgres9.0以降も必要です 働き。古いバージョンでは、次のように置き換えることができます:array_to_string(array_agg(...), ', ')

    特別なキャスト'mytbl'::regclassについて疑問に思われるかもしれません 。マニュアルでオブジェクト識別子の種類の詳細をお読みください。

    ところで:NULL 値はCOUNT(col)に追加されません デフォルトで。

    mytblを(スキーマ修飾された)テーブル名に置き換えます 。あなたの場合、それは次のようになります:

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

    大文字と小文字を混在させたり、識別子をめちゃくちゃにしたりする必要がある場合(引用符に注意してください):

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


    1. EssentialPostgreSQLモニタリング-パート3

    2. SQLServerのLIKE論理演算子とは-SQLServer/TSQLチュートリアルパート123

    3. SQLServerのデフォルトの文字エンコード

    4. psql:致命的:ロールpostgresは存在しません