ホームページ > データベース > mysql チュートリアル > 複数の条件を使用して SQL でデータの出現を効率的にカウントするにはどうすればよいですか?

複数の条件を使用して SQL でデータの出現を効率的にカウントするにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-24 06:27:11
オリジナル
744 人が閲覧しました

How Can I Efficiently Count Data Occurrences in SQL with Multiple Conditions?

効率的な 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート