使用单个 SQL 查询高效检索两个单独的数据集
此示例演示如何从单个 SQL 查询检索两个不同的数据集,从而避免多个查询的需要。 我们将使用 transactions
表(包含 id
、account_id
、budget_id
、points
和 type
列)进行说明。目标是获得:
points
的总 budget_id
,其中 type
是“分配”。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_points
。 GROUP BY
子句确保为每个唯一的 budget_id
.
预期输出:
查询将返回类似于以下的结果集:
<code>budget_id | allocated_points | issued_points ----------|-------------------|--------------- 434 | 200000 | 100 242 | 100000 | 5020 621 | 45000 | 3940</code>
以上是如何在单个 SQL 查询中使用条件聚合检索两个不同的数据集?的详细内容。更多信息请关注PHP中文网其他相关文章!