我是sql的新手。基本上,我正在尝试从一张表中SUM
超过某种ID的金额。我有这部分,但我也想知道那个人是否活跃,那是来自另一个表。我知道我可以使用我的ID,并且已经尝试了UNION,但到目前为止还没有运气。
提供数据p.inactive
。
SELECT p.inactive
FROM deb d
RIGHT JOIN pat p ON(d.debitor = p.cpr);
d.amount
有效,但p.inactive
无效,因为LEFT JOIN
SELECT SUM(d.amount), p.inactive
FROM deb d
LEFT JOIN pat p ON(d.debitor = p.cpr)
GROUP BY d.debitor;
因此,我尝试将它们与UNION结合使用,但是p.inactive
仍然是null
( SELECT d.debitor, p.inactive FROM deb d
LEFT JOIN pat p ON d.debitor = p.cpr
)
UNION
(
SELECT d.debitor, p.inactive FROM deb d
RIGHT JOIN pat p ON d.debitor = p.cpr
WHERE d.debitor IS NULL
);
我现在完全被卡住了吗?有人可以帮忙吗?不用看我的数据库就可以了吗?让我知道是否需要提供更多数据/信息。
----------------------更新
表deb
借方|金额
1 ... | ... 10
1 ... | ... 20
1 ... | ... 45
2 ... | ... 30
2 ... | ... 10
餐桌拍子
cpr ... | ...无效
1 ... | ... 0
2 ... | ... 1
3 ... | ... 0
4 ... | ... 0
5 ... | ... 1
6 ... | ... 1
p.cpr和d.debitor = 1的人的总和为75,并且是无效的
p.cpr和d.debitor = 2的人的总和为40,并且处于活动状态
最终更新:
糟糕,我假设pat.cpr中有一些deb.debitors,但没有,因此没有匹配项。下次,我将针对课程的第一部分进行测试。
答案 0 :(得分:1)
假设借方-cpr被多对一连接,您可以使用左连接示例,但要在GROUP BY子句中包含所需的列:
SELECT SUM(d.amount), p.inactive
FROM deb d
LEFT JOIN pat p ON d.debitor = p.cpr
GROUP BY d.debitor, p.inactive;
或者您可以在分组后加入(这使您可以包括通常不能在分组依据内使用的列):
SELECT a.debitor, a.total, p.whatever
FROM (
SELECT d.debitor, SUM(d.amount) total
FROM deb d
GROUP BY d.debitor
) AS a
LEFT JOIN pat p ON a.debitor = p.cpr
PS:如果要从右表中消除NULL值,则需要INNER JOIN
。
答案 1 :(得分:1)
因此d.debitor
是p.cpr
的外键。
也许我缺少了一些东西,但是在那种情况下,解决方案看起来很简单:
SELECT pat.cpr,
pat.inactive,
COALESCE(SUM(deb.amount), 0) AS sum_amount
FROM pat
LEFT JOIN deb
ON pat.cpr = deb.debitor
GROUP BY pat.cpr,
pat.inactive;
如果特定deb.debitor
没有相应的pat.cpr
,则返回总计为0。