SQL の条件付きフィルターによる合計の計算
大規模な SQL ステートメントを扱う場合、多くの場合、合計値を計算する必要があります。ただし、特定の条件に基づいてデータのサブセットのみを考慮することが必要な場合もあります。この記事では、既存の明細書を変更して、一意のトランザクション ID の現金価値の合計を計算する方法を説明します。ただし、値の日付が先月以内のもののみが対象です。
問題:
複雑な SQL ステートメント内の各トランザクション ID の合計現金を計算するには、次のコードが使用されます。
select sum(cash) from Table a where a.branch = p.branch and a.transID = p.transID) TotalCash
ただし、目的はこのステートメントを変更して、先月以内の価値日を持つ現金価値のみを合計するようにします。
解決策:
修正されたコードは、元の CASE 式を次の式に置き換える必要があります。以下:
SUM(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END)
説明:
元のコードの CASE 式は間違った構文を使用していました。この場合、結果を決定するためにブール式が評価されるため、SEARCH CASE 構文が必要です。
CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END
修正されたコードでは、CASE 式は、ValueDate が @startMonthDate より大きいかどうかをチェックします。そうであれば、現金金額が計算に含まれます。それ以外の場合は、0 に置き換えられます。これにより、先月内の現金価値のみが考慮されるようになります。
パフォーマンスに関する考慮事項:
パフォーマンスが問題になる場合は、依存サブクエリの代わりに JOIN および GROUP BY の使用を検討することをお勧めします。これにより、ステートメントの実行速度が向上する可能性があります。
以上がSQLで先月の現金価値の合計を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。