gpt4 book ai didi

SQL连接不丢失行

转载 作者:行者123 更新时间:2023-12-02 07:34:56 25 4
gpt4 key购买 nike

我有 2 个表,具有相同的用户 ID、类别、计数架构。我需要一个查询来对每个用户 ID/类别对的计数求和。有时一对将存在于一个表中,而不存在于另一个表中。我在不丢失用户 ID/类别对仅存在于 1 个表中的行的情况下进行连接时遇到问题。这就是我正在尝试的(没有成功):

select a.user, a.category, count=a.count+b.count
from #temp1 a join #temp2 b
on a.user = b.user and a.category = b.category

例子:

输入:

user    category    count
id1 catB 3
id2 catG 9
id3 catW 17

user category count
id1 catB 1
id2 catM 5
id3 catW 13

期望的输出:

user    category    count
id1 catB 4
id2 catG 9
id2 catM 5
id3 catW 30

更新:“count”不是实际的列名。我只是为了这个例子而使用它,我忘记了它是一个保留字。

最佳答案

你需要:

  1. 使用完全外部联接,这样您就不会删除一个表中存在的行而不是另一个表中的行
  2. 在加法之前合并计数,因为 0 + NULL = NULL

此外,因为 COUNT 是一个保留字,我建议将其转义。

因此,使用所有这些准则,您的查询将变为:

SELECT COALESCE(a.user, b.user) AS user, 
COALESCE(a.category, b.category) AS category,
COALESCE(a.[count],0) + COALESCE(b.[count],0) AS [count]
FROM #temp1 AS a
FULL OUTER JOIN #temp2 AS b
ON a.user = b.user AND
a.category = b.category

关于SQL连接不丢失行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17578744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com