単一の SQL ステートメントで複数のカウントを効率的にクエリする
データベース プログラミングでは、カウント、平均、合計などの集計データを取得することが重要になることがよくあります。 1 つのクエリに複数の種類のカウントが必要な場合は、条件付き集計とグループ化を組み合わせて使用できます。
次のクエリを考えてみましょう:
<code class="language-sql">SELECT distributor_id, COUNT(*) AS TOTAL, COUNT(*) WHERE level = 'exec', COUNT(*) WHERE level = 'personal'</code>
このクエリは、各ディストリビューターについて次の情報を返すように設計されています:
ただし、このクエリでは複数行の結果が得られ、各グループは 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 関数は、各条件ステートメントによって返された値を合計します。
このアプローチにはいくつかの利点があります:
ただし、条件付き集計を使用して大規模なデータ セットを処理する場合は、パフォーマンスへの影響を考慮することが重要です。この場合、クエリを最適化するためにインデックスまたはその他の手法を使用する必要がある場合があります。
以上が単一の SQL ステートメントで複数のカウントを効率的にクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。