优雅的解决方案:克服 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”的限制,从而实现高效的条件聚合。
以上是MySQL在不直接支持'SUM IF”和'COUNT IF”的情况下如何有效实现条件聚合?的详细内容。更多信息请关注PHP中文网其他相关文章!