ホームページ >データベース >mysql チュートリアル >「SUM IF」と「COUNT IF」を直接サポートせずに、MySQL はどのようにして条件付き集計を効果的に実現できるのでしょうか?
エレガントなソリューション: MySQL の 'SUM IF' と 'COUNT IF' の制限を克服する
それらは便利であるにもかかわらず、MySQL には直接サポートがありません。 「SUM IF」および「COUNT IF」関数の場合。この制限は、条件付き集計を扱うときにイライラすることがよくあります。ただし、CASE ステートメントを使用した洗練された解決策があります。
次のシナリオを考えてみましょう:
| id | hour | kind | |---|---|---| | 1 | 10 | 1 | | 2 | 15 | 2 | | 3 | 20 | 1 | | 4 | 25 | 3 |
目的は次を計算することです:
元の試行と MySQL の応答:
「SUM( IF(...) )」または「COUNT( IF(...) )」を使用した最初の試行ではエラーが発生します。 MySQL では、集計関数と「IF」のような制御構造を混在させることはできません。
CASE ステートメントを使用した解決策:
CASE ステートメントは、動的に評価して返す条件式を提供します。価値観。これを使用すると、目的の条件付き集計を効果的に実現できます。方法は次のとおりです:
SELECT count(id), SUM(hour) as totHour, SUM(case when kind = 1 then 1 else 0 end) as countKindOne
このクエリは次の操作を実行します:
出力:
| count(id) | totHour | countKindOne | |---|---|---| | 4 | 70 | 2 |
CASE ステートメントを利用することで、MySQL の 'SUM IF' と 'COUNT IF' の制限をエレガントに克服でき、効率的な条件付き集計。
以上が「SUM IF」と「COUNT IF」を直接サポートせずに、MySQL はどのようにして条件付き集計を効果的に実現できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。