ホームページ >データベース >mysql チュートリアル >MySQL の条件付きフィルタリングを使用して複数の合計集計を効率的に取得する方法

MySQL の条件付きフィルタリングを使用して複数の合計集計を効率的に取得する方法

Susan Sarandon
Susan Sarandonオリジナル
2025-01-21 12:45:10784ブラウズ

How to Efficiently Retrieve Multiple Sum Aggregations with Conditional Filtering in MySQL?

MySQL: 条件付きフィルタリングを使用して複数の合計集計を効率的に取得する

データベースを操作する場合、多くの場合、さまざまな条件に基づいて複数のデータセットを取得する必要があります。 単一のクエリ内でさまざまなフィールド値を扱う場合、これは特に複雑になる可能性があります。

課題:

transactionsidaccount_idbudget_id、および points を含む type テーブルについて考えます。 目標は、単一のクエリで、points が 'allocation' に等しい各 budget_idtype の合計を取得し、points が 'issue' に等しい type の合計を個別に取得することです。

解決策: MySQL の IF() 機能を活用する

MySQL の IF() 関数は、簡潔な解決策を提供します。 SUM() 集計内でこれを使用し、GROUP BY と組み合わせて、目的の結果を達成できます。

<code class="language-sql">SELECT 
    budget_id, 
    SUM(IF(type = 'allocation', points, 0)) AS allocated,
    SUM(IF(type = 'issue', points, 0)) AS issued
FROM 
    transactions
GROUP BY 
    budget_id;</code>

クエリの内訳:

  • IF(type = 'allocation', points, 0): この条件式は各行をチェックします。 type が「allocation」の場合、points 値を返します。それ以外の場合は、0 を返します。
  • IF(type = 'issue', points, 0): これは上記を反映していますが、type = 'issue'.
  • の場合が異なります。
  • SUM(...): SUM() 関数は、各条件式の合計を計算し、「割り当て」タイプと「発行」タイプごとにポイントを効果的に合計します。
  • GROUP BY budget_id: これにより、結果が budget_id ごとにグループ化され、各予算の合計額が提供されます。

例:

クエリは、transactions テーブルに対して実行されると、次のような結果セットを生成します。

<code>budget_id | allocated | issued
----------|-----------|--------
     434  |   200000  |   100
     242  |   100000  |  5020
     621  |    45000  |  3940</code>

これは、単一の最適化された MySQL クエリ内で個別の条件付きフィルターを使用して、複数の集約されたデータセットを効率的に取得することを示しています。

以上がMySQL の条件付きフィルタリングを使用して複数の合計集計を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。