ホームページ >データベース >mysql チュートリアル >MySQL の条件付きフィルタリングを使用して複数の合計集計を効率的に取得する方法
MySQL: 条件付きフィルタリングを使用して複数の合計集計を効率的に取得する
データベースを操作する場合、多くの場合、さまざまな条件に基づいて複数のデータセットを取得する必要があります。 単一のクエリ内でさまざまなフィールド値を扱う場合、これは特に複雑になる可能性があります。
課題:
列 transactions
、id
、account_id
、budget_id
、および points
を含む type
テーブルについて考えます。 目標は、単一のクエリで、points
が 'allocation' に等しい各 budget_id
の type
の合計を取得し、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 サイトの他の関連記事を参照してください。