MySQL:通过条件过滤高效检索多个求和聚合
使用数据库通常需要根据不同的条件检索多个数据集。 当处理单个查询中的不同字段值时,这可能会特别复杂。
挑战:
考虑一个包含 transactions
、id
、account_id
、budget_id
和 points
列的 type
表。 目标是在单个查询中检索每个 points
的 budget_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中文网其他相关文章!