ホームページ >データベース >mysql チュートリアル >SQL クエリ内の条件付き出現を効率的にカウントするにはどうすればよいですか?
SQL での条件付き出現の効率的なカウント
このガイドでは、SQL クエリ内の条件付きデータの出現を特定の列ごとにグループ化してカウントするためのさまざまな方法を説明します。最適なアプローチはデータベース システムによって異なります。
PostgreSQL 9.4 以降: FILTER
句
PostgreSQL 9.4 以降のバージョンでは、FILTER
集計関数内の COUNT
句を使用する最も効率的で読みやすいソリューションが提供されます。
<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 category;</code>
PostgreSQL の簡潔な代替手段
短い構文でも同じ結果が得られます。
<code class="language-sql">SELECT category, COUNT(CASE WHEN question1 = 0 THEN 1 END) AS zero, COUNT(CASE WHEN question1 = 1 THEN 1 END) AS one, COUNT(CASE WHEN question1 = 2 THEN 1 END) AS two FROM reviews GROUP BY category;</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); ``` This approach dynamically handles a larger number of categories more efficiently than the previous methods.</code>
以上がSQL クエリ内の条件付き出現を効率的にカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。