優雅的解決方案:克服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 |
以上是MySQL如何在不直接支援「SUM IF」和「COUNT IF」的情況下有效實現條件聚合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!