>我有 3 个 SQLite 表:
渠道
channelId triad
1 1
2 1
3 0
视频
channelId videoId topic
1 xx 1
1 yy 0
2 pp 0
3 kk 1
评论
commentId replyId videoId sentiment
NULL er41 xx -3
clxpo NULL kk 0.05
clutz NULL yy 2.38
NULL edg15 xx 1.7
clopq NULL pp 1
dkt2 NULL kk 0.95
对于 triad = 1 的每个频道,我需要知道主题 = 1 的频道视频的情绪总和以及该频道的评论数量。
键是:
channel.channelId = video.channelId
video.videoId = comment.videoId
最终结果应该是:
channelId sum(sentiment) count(number of comments) triad topic
1 -1,3 2 1 1
如何链接这 3 个表以获得所需的结果?
这是一个简单的 3 向合并,带有一些过滤功能,将其限制为仅具有triad
和topic
为 1 的行,按channelid
分组:
SELECT ch.channelid
, sum(co.sentiment) AS sum_sentiment
, count(*) AS num_comments
FROM channel AS ch
JOIN video AS v ON ch.channelid = v.channelid
JOIN comment AS co ON v.videoid = co.videoid
WHERE ch.triad = 1 AND v.topic = 1
GROUP BY ch.channelid
ORDER BY ch.channelid;
这给了
channelid sum_sentiment num_comments
---------- ------------- ------------
1 -1.3 2
如果表中有很多行,请使用 sqlite3 命令行工具的 .expert 命令来确定应为优化的执行计划添加哪些索引。