効率的な SQL 条件カウント方法
SQL では、特定の列に従ってデータの出現をグループ化し、カウントする方法がたくさんあります。 PostgreSQL では、クエリの例に示すように、CASE 式を使用するのが最も簡単な方法です。ただし、このアプローチは、多数の可能な値を扱う場合には煩雑になる可能性があります。
PostgreSQL 9.4 以降では、より最適化された柔軟な方法である FILTER
集計オプションが提供されます。 FILTER
句を使用すると、集計関数に追加の条件を適用して、特定の条件に一致する特定の値のみをカウントできます。
<code class="language-sql">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;</code>
このクエリは、question1 列内の 0、1、2 の出現を効率的にカウントし、カテゴリ列ごとにグループ化します。
さらに最適化するには、次の短いバージョンを使用できます:
<code class="language-sql">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;</code>
複数の条件または多数のオプションを含む複雑なシナリオの場合、crosstab()
関数は優れたパフォーマンスとシンプルさを提供します。
<code class="language-sql">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);</code>
この crosstab
クエリは、必要なすべてのカウントを含む結果セットを生成し、簡単にアクセスして分析できるように名前付き列として表示されます。
以上が複数の条件を使用して SQL でデータの出現を効率的にカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。