ホームページ > データベース > mysql チュートリアル > 単一の SQL ステートメントで複数のカウントを効率的にクエリする方法

単一の SQL ステートメントで複数のカウントを効率的にクエリする方法

DDD
リリース: 2025-01-20 16:23:09
オリジナル
688 人が閲覧しました

How to Efficiently Query for Multiple Counts in a Single SQL Statement?

単一の SQL ステートメントで複数のカウントを効率的にクエリする

データベース プログラミングでは、カウント、平均、合計などの集計データを取得することが重要になることがよくあります。 1 つのクエリに複数の種類のカウントが必要な場合は、条件付き集計とグループ化を組み合わせて使用​​できます。

問題: 1 つのクエリで複数のカウントが発生する

次のクエリを考えてみましょう:

<code class="language-sql">SELECT distributor_id,
COUNT(*) AS TOTAL,
COUNT(*) WHERE level = 'exec',
COUNT(*) WHERE level = 'personal'</code>
ログイン後にコピー

このクエリは、各ディストリビューターについて次の情報を返すように設計されています:

  • レコードの総数
  • レベル「exec」のレコード数
  • レベルが「個人」のレコードの数

ただし、このクエリでは複数行の結果が得られ、各グループは 1 行とカウントされます。これを回避するには、必要なすべてのカウントに対して 1 つの行を返すようにクエリを構造化する必要があります。

解決策: 条件付き集計とグループ化

この問題を解決するには、CASE ステートメントを集計関数 (COUNT など) と組み合わせて使用​​します。 CASE ステートメントを使用すると、条件付きで式を評価し、対応する値を返すことができます。これにより、1 つのクエリで特定の基準に基づいてレコードをカウントできるようになります。

次の変更されたクエリには CASE ステートメントが含まれています:

<code class="language-sql">SELECT distributor_id,
    count(*) AS total,
    sum(case when level = 'exec' then 1 else 0 end) AS ExecCount,
    sum(case when level = 'personal' then 1 else 0 end) AS PersonalCount
FROM yourtable
GROUP BY distributor_id</code>
ログイン後にコピー

CASE ステートメントを使用すると、集計に条件を適用できます。 WHEN 句は条件を指定し、THEN 句と ELSE 句はカウントする対応する値を定義します。 SUM 関数は、各条件ステートメントによって返された値を合計します。

利点と注意事項:

このアプローチにはいくつかの利点があります:

  • 複数のカウントを 1 つの結果セットに結合することでクエリを簡素化します。
  • 各ディストリビューターに対して 1 行の結果が返されるようにします。
  • ほとんどのリレーショナル データベース管理システム (RDBMS) でサポートされています。

ただし、条件付き集計を使用して大規模なデータ セットを処理する場合は、パフォーマンスへの影響を考慮することが重要です。この場合、クエリを最適化するためにインデックスまたはその他の手法を使用する必要がある場合があります。

以上が単一の SQL ステートメントで複数のカウントを効率的にクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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