首页 > 数据库 > mysql教程 > 如何在 MySQL 中通过条件过滤高效检索多个求和聚合?

如何在 MySQL 中通过条件过滤高效检索多个求和聚合?

Susan Sarandon
发布: 2025-01-21 12:45:10
原创
833 人浏览过

How to Efficiently Retrieve Multiple Sum Aggregations with Conditional Filtering in MySQL?

MySQL:通过条件过滤高效检索多个求和聚合

使用数据库通常需要根据不同的条件检索多个数据集。 当处理单个查询中的不同字段值时,这可能会特别复杂。

挑战:

考虑一个包含 transactionsidaccount_idbudget_idpoints 列的 type 表。 目标是在单个查询中检索每个 pointsbudget_id 总和,其中 type 等于“分配”,并分别检索 points 的总和,其中 type 等于“问题”。

解决方案:利用 MySQL 的 IF() 函数

MySQL 的 IF() 函数提供了一个简洁的解决方案。 我们可以在 SUM() 聚合中使用它,并与 GROUP BY 结合使用,以获得所需的结果:

<code class="language-sql">SELECT 
    budget_id, 
    SUM(IF(type = 'allocation', points, 0)) AS allocated,
    SUM(IF(type = 'issue', points, 0)) AS issued
FROM 
    transactions
GROUP BY 
    budget_id;</code>
登录后复制

查询细分:

  • IF(type = 'allocation', points, 0):此条件表达式检查每一行。如果 type 是“分配”,则返回 points 值;否则,返回 0。
  • IF(type = 'issue', points, 0):这与上述内容相同,但对于 type = '问题'。
  • SUM(...)SUM() 函数计算每个条件表达式的总计,有效地分别对“分配”和“发布”类型的点进行求和。
  • GROUP BY budget_id:按 budget_id 对结果进行分组,提供每个预算的汇总金额。

示例:

针对 transactions 表执行查询时,可能会生成如下结果集:

<code>budget_id | allocated | issued
----------|-----------|--------
     434  |   200000  |   100
     242  |   100000  |  5020
     621  |    45000  |  3940</code>
登录后复制

这展示了在单个优化的 MySQL 查询中通过不同的条件过滤有效检索多个聚合数据集。

以上是如何在 MySQL 中通过条件过滤高效检索多个求和聚合?的详细内容。更多信息请关注PHP中文网其他相关文章!

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