首页 > 解决方案 > 如何在两个表上分组并应用聚合函数?

问题描述

架构:(原始资源

在此处输入图像描述

如何在两个表上应用聚合函数同时对它们进行分组?如果捐赠者不满意,我想要血型表和需要订购的数量。在上述模式中,查询应返回 A+ 14,因为 Acceptor 要求为 15,而 Donor 仅提供 1。所有其他血型都满足。请提出一种方法来做到这一点。提前致谢!

标签: mysqlsqldatabaseoracle

解决方案


您可以使用

SELECT bg, SUM(total)
FROM
(
    (SELECT bg, SUM(amount) AS total FROM Donor GROUP BY bg) UNION
    (SELECT bg, -SUM(amount) AS total FROM Acceptor GROUP BY bg)
) a
GROUP BY bg
HAVING SUM(total) < 0;

这将使您得到 (A+, -14),表示 A+ 组的不足 14。

这首先将 Donor 中的可用血型相加,然后将 Acceptor 中可用血型的负数相加,然后再次将其全部加起来。

您可以通过删除该HAVING子句来获得所有结果,或者您可以通过SELECTing-SUM(total)而不是SUM(total).


推荐阅读