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

条件付きSQLカウント

    Postgres 9.4以降では、集約FILTERを使用します オプション。通常、最もクリーンで最速です:

    SELECT category
         , count(*) FILTER (WHERE question1 = 0) AS zero
         , count(*) FILTER (WHERE question1 = 1) AS one
         , count(*) FILTER (WHERE question1 = 2) AS two
    FROM   reviews
    GROUP  BY 1;
    

    FILTERの詳細 条項:

    • 追加の(個別の)フィルターを使用して列を集約します

    必要に応じて短い

    SELECT category
         , count(question1 = 0 OR NULL) AS zero
         , count(question1 = 1 OR NULL) AS one
         , count(question1 = 2 OR NULL) AS two
    FROM   reviews
    GROUP  BY 1;
    

    その他の構文バリアント:

    • 絶対的なパフォーマンスのために、SUMは高速ですか、それともCOUNTですか?

    適切なクロス集計クエリ

    crosstab() 最高のパフォーマンスが得られ、オプションの長いリストの場合は短くなります:

    SELECT * FROM crosstab(
         'SELECT category, question1, count(*) AS ct
          FROM   reviews
          GROUP  BY 1, 2
          ORDER  BY 1, 2'
       , 'VALUES (0), (1), (2)'
       ) AS ct (category text, zero int, one int, two int);
    

    詳細な説明:

    • PostgreSQLクロス集計クエリ


    1. PostgreSQLでのpg_sleep_until()のしくみ

    2. 単一の文字列としてのコンマ区切りリスト、T-SQL

    3. MySQLでデータベースを削除するSQLクエリ

    4. テーブルユーザーのインデックスの解決が壊れています。それを修理してみてください