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