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

Susan Sarandon
发布: 2024-11-15 00:58:02
原创
668 人浏览过

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 |
登录后复制

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

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板