mysql - 如何在两个表上分组并应用聚合函数?
问题描述
架构:(原始资源)
如何在两个表上应用聚合函数同时对它们进行分组?如果捐赠者不满意,我想要血型表和需要订购的数量。在上述模式中,查询应返回 A+ 14,因为 Acceptor 要求为 15,而 Donor 仅提供 1。所有其他血型都满足。请提出一种方法来做到这一点。提前致谢!
解决方案
您可以使用
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
子句来获得所有结果,或者您可以通过SELECT
ing-SUM(total)
而不是SUM(total)
.
推荐阅读
- oracle - 在 ubuntu 上安装 Oracle-database-18c-xe 错误 ORA-07445
- javascript - 是否可以在 Angular 8 中调用 yahoo 联系人 API
- maven - 将使用 ant build 和 antrun 插件创建的 jar 添加到 maven 构建依赖项
- actions-on-google - 交易 API 不适用于付款
- r - 如何将不同的 stat_smooths 分配给不同的方面
- html - 如何防止导航栏下拉菜单与其他内容重叠?
- jquery - selectize 的 AG-Grid 自定义下拉问题
- javascript - 在 Razor 页面中动态添加和删除列表项控件
- javascript - 如何动态比较javascript数组中的差异
- asp.net-core - 如果在运行应用程序时不存在记录,如何插入重要的主表记录