首页 >数据库 >mysql教程 >MySQL在不直接支持'SUM IF”和'COUNT IF”的情况下如何有效实现条件聚合?

MySQL在不直接支持'SUM IF”和'COUNT IF”的情况下如何有效实现条件聚合?

Susan Sarandon
Susan Sarandon原创
2024-11-15 00:58:02748浏览

How can MySQL effectively achieve conditional aggregations without direct support for 'SUM IF' and 'COUNT IF'?

优雅的解决方案:克服 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 |

目标是计算:

  • 记录总数
  • 总小时数
  • 'kind'等于1的记录数

原始尝试和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):计算记录总数。
  • SUM(hour) :计算总小时数。
  • SUM(case when kind = 1 then 1 else 0 end):使用 CASE 语句有条件地计算 'kind' 等于 1 的记录数。

输出:

| count(id) | totHour | countKindOne |
|---|---|---|
| 4 | 70 | 2 |

通过利用 CASE 语句,我们可以优雅地克服 MySQL 中“SUM IF”和“COUNT IF”的限制,从而实现高效的条件聚合。

以上是MySQL在不直接支持'SUM IF”和'COUNT IF”的情况下如何有效实现条件聚合?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn