SQL sum 按列分组,包括与从属相同的表的行
Posted
技术标签:
【中文标题】SQL sum 按列分组,包括与从属相同的表的行【英文标题】:SQL sum group by column including rows of same table as dependents 【发布时间】:2021-10-09 01:08:13 【问题描述】:我想查看用户发送了多少条消息,因此我有一个存储频道的表和另一个存储作者和实际数据的表。其中一个重要部分是频道可以是子频道,这意味着它们是另一个频道的子频道,但也有自己的 ID。
表 1
Row ID | Guild ID | Channel ID | Parent Channel ID (foreign key on Table 1 Channel ID) |
---|---|---|---|
1 | 1 | 2 | null |
2 | 1 | 3 | null |
3 | 1 | 4 | 3 |
表 2
Row ID | Parent Channel ID (foreign key on Table 1 Channel ID) | Author ID | Messages |
---|---|---|---|
1 | 2 | 1 | 6 |
2 | 3 | 2 | 54 |
3 | 4 | 1 | 3 |
我有一个查询,它从不属于任何其他频道 ID 的频道 ID 获取消息的总和:
SELECT sc."guild_id" guild, sc."channel_id" channel, sum(s."NUM") num
FROM statistic s
INNER JOIN statschannel sc on s.parent_channel_id = sc.channel_id
GROUP BY sc."guild_id", sc."channel_id";
我想更改查询,以便 (GUILD ID 1, CHANNEL ID 3)
的 SUM()
包含 (GUILD ID 1, CHANNEL ID 4)
的总和,因为 ID 为 4 的频道是子频道。我尝试进行内部连接,如下所示,但它只返回具有父 ID 的频道的结果。
SELECT sc."guild_id" guild, sc."channel_id" channel, sum(s."NUM") num
FROM statistic s
INNER JOIN statschannel sc on s.parent_channel_id = sc.channel_id
INNER JOIN statschannel sc2 on sc.parent_channel_id = sc2.channel_id
GROUP BY sc."guild_id", sc."channel_id";
我不知道在这里做什么。我想要返回的数据应该是这样的:
Guild ID | Channel ID | Messages |
---|---|---|
1 | 2 | 6 |
1 | 3 | 57 ( 54 + 3) |
1 | 4 | 3 |
【问题讨论】:
【参考方案1】:我设法制定了一个提供我想要的结果的解决方案。
SELECT "statschannel"."guild_id" "guild_id",
"statschannel"."channel_id" "channel_id",
SUM("statistic2"."NUM") + COALESCE(SUM("statistic"."NUM"), 0) "num"
FROM "statschannel"
LEFT OUTER JOIN "statschannel" "statschannel__parent_channel"
ON "statschannel__parent_channel"."channel_id" =
"statschannel"."parent_channel_id"
LEFT OUTER JOIN "statistic" ON "statschannel__parent_channel"."channel_id" =
"statistic"."parent_channel_id"
LEFT OUTER JOIN "statistic" "statistic2" ON "statschannel".channel_id =
"statistic2".parent_channel_id
GROUP BY statschannel."guild_id", "statschannel"."channel_id"
这将提供以下结果:
guild_id | channel_id | messages |
---|---|---|
1 | 2 | 6 |
1 | 3 | 57 |
1 | 4 | 3 |
【讨论】:
以上是关于SQL sum 按列分组,包括与从属相同的表的行的主要内容,如果未能解决你的问题,请参考以下文章