Sql 合并具有不同WHERE条件的不同表中的计数(*)
我有三张桌子Sql 合并具有不同WHERE条件的不同表中的计数(*),sql,Sql,我有三张桌子 OWNERS: pk name POSTS: pk, post_date, owner_pk REPLIES: pk,reply_date, post_pk,owner_pk,comment_count 在两个日期之间:date1和date2我希望结果为: 所有者:姓名计数(帖子)总和(评论计数) 我的问题是,我无法理解如何编写一个单独的查询来分别对POSTS和reply表求和 例:第1天一篇文章有两条评论。第二天一篇文章没有评论。回复表存储给定帖子/天的评论总数 PostA
OWNERS: pk name
POSTS: pk, post_date, owner_pk
REPLIES: pk,reply_date, post_pk,owner_pk,comment_count
在两个日期之间:date1和date2我希望结果为:
所有者:姓名计数(帖子)总和(评论计数)
我的问题是,我无法理解如何编写一个单独的查询来分别对POSTS和reply表求和
例:第1天一篇文章有两条评论。第二天一篇文章没有评论。回复表存储给定帖子/天的评论总数
PostA Day1
CommentA1 Day1
CommentA2 Day1
PostB Day2
CommentA3 Day2
PostC Day3
运行第1天的查询:
Owner:Name count(post) sum(comment_count)
OwnerName 1 2
运行第2天的查询:
OwnerName 1 1
在第3天运行查询:
OwnerName 1 0
与其使用SUM()
,不如使用COUNT(DISTINCT)
与其使用SUM()
,不如使用COUNT(DISTINCT)
你可能需要在你的问题中提供更多的细节,但我怀疑你想要的是这样的东西:
SELECT name, COUNT(posts.pk), COUNT(replies.pk)
FROM owners, OUTER (posts, OUTER replies)
WHERE owners.pk = posts.owner_pk
AND posts.pk = replies.post_pk
AND (posts.post_date BETWEEN ? AND ? OR replies.reply_date BETWEEN ? AND ?)
GROUP BY name
你可能需要在你的问题中提供更多的细节,但我怀疑你想要的是这样的东西:
SELECT name, COUNT(posts.pk), COUNT(replies.pk)
FROM owners, OUTER (posts, OUTER replies)
WHERE owners.pk = posts.owner_pk
AND posts.pk = replies.post_pk
AND (posts.post_date BETWEEN ? AND ? OR replies.reply_date BETWEEN ? AND ?)
GROUP BY name
据我所知,回复表中没有owner_pk列tell@kevev22这是第三列
POSTS:pk,post\u date,owner\u pk
我添加了逗号不知道你的意思。OP的意思是表格是回复:回复日期,发布主键。您正在r.owner\u pk=o.pk上使用左连接回复r
。没有r.owner\u pk
@kevev22谢谢,我错过了回复只有帖子外键,而不是所有者外键。。。另外,我希望回复确实有PK,尽管OP没有提到…谢谢你的帮助。我的例子是错误的。回复表确实有一个所有者的外键,并且还保存一个特定回复/天的评论数的值。在查询中,我需要给定日期的计数(posts)和总和(comment\u COUNT)。再次感谢。就我所知,回复表中没有owner_pk列tell@kevev22这是第三列POSTS:pk,post\u date,owner\u pk
我添加了逗号不知道你的意思。OP的意思是表格是回复:回复日期,发布主键。您正在r.owner\u pk=o.pk上使用左连接回复r
。没有r.owner\u pk
@kevev22谢谢,我错过了回复只有帖子外键,而不是所有者外键。。。另外,我希望回复确实有PK,尽管OP没有提到…谢谢你的帮助。我的例子是错误的。回复表确实有一个所有者的外键,并且还保存一个特定回复/天的评论数的值。在查询中,我需要给定日期的计数(posts)和总和(comment\u COUNT)。再次感谢。我从来没有见过没有连接的外部-这是标准吗?你怎么能分辨左/右/全?它当然是有效的SQL,而且是我最熟悉的方言。(我一定有点老派。)@Michael Frederickson的回答可能是你更熟悉的风格。是的,这是ansi标准,我要查一下。我从未见过没有连接的外部-这是标准吗?你怎么能分辨左/右/全?它当然是有效的SQL,而且是我最熟悉的方言。(我一定有点老派。)@Michael Frederickson的回答可能是你更熟悉的风格。是的,这是ansi标准,我要查一下。