首页 >数据库 >mysql教程 >如何在单个 SQL 查询中使用条件聚合检索两个不同的数据集?

如何在单个 SQL 查询中使用条件聚合检索两个不同的数据集?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-21 12:36:10421浏览

How to Retrieve Two Distinct Data Sets with Conditional Aggregation in a Single SQL Query?

使用单个 SQL 查询高效检索两个单独的数据集

此示例演示如何从单个 SQL 查询检索两个不同的数据集,从而避免多个查询的需要。 我们将使用 transactions 表(包含 idaccount_idbudget_idpointstype 列)进行说明。目标是获得:

  1. 每个 points 的总 budget_id,其中 type 是“分配”。
  2. 每个 points 的总 budget_id,其中 type 是“问题”。

解决方案:条件聚合

单个 SQL 查询可以使用条件聚合来实现此目的:

<code class="language-sql">SELECT 
    budget_id,
    SUM(CASE WHEN type = 'allocation' THEN points ELSE 0 END) AS allocated_points,
    SUM(CASE WHEN type = 'issue' THEN points ELSE 0 END) AS issued_points
FROM 
    transactions
GROUP BY 
    budget_id;</code>

此查询使用 CASE 语句(或某些数据库系统中的 IF)来有条件地对 points 求和。 如果 type 是“分配”,则将 points 添加到 allocated_points 中;否则加0。 同样的逻辑也适用于issued_pointsGROUP BY 子句确保为每个唯一的 budget_id.

计算总和

预期输出:

查询将返回类似于以下的结果集:

<code>budget_id | allocated_points | issued_points
----------|-------------------|---------------
    434   |       200000      |     100
    242   |       100000      |     5020
    621   |        45000      |     3940</code>

以上是如何在单个 SQL 查询中使用条件聚合检索两个不同的数据集?的详细内容。更多信息请关注PHP中文网其他相关文章!

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