我有一个包含以下两个表的数据库,成员,帖子我正在寻找一种方法来计算用户拥有多少帖子。
(来源:http: //i.stack.imgur.com/FDv31.png)
我尝试了以下 SQL 命令的许多变体,但均未成功。而不是显示单个用户的帖子数,而是显示单行,其中所有帖子作为计数。
最后我想要这样的东西
(来源:http: //i.stack.imgur.com/EbaEj.png)
我有一个包含以下两个表的数据库,成员,帖子我正在寻找一种方法来计算用户拥有多少帖子。
(来源:http: //i.stack.imgur.com/FDv31.png)
我尝试了以下 SQL 命令的许多变体,但均未成功。而不是显示单个用户的帖子数,而是显示单行,其中所有帖子作为计数。
最后我想要这样的东西
(来源:http: //i.stack.imgur.com/EbaEj.png)
可能是我在这里遗漏了一些东西,但这个查询似乎会给你你想要的结果:
SELECT member.ID,
member.Name,
(SELECT COUNT(*) FROM Posts WHERE member.ID = Posts.user_id) AS total
FROM member;
我在查询中留下了评论,因为对于计算的评论组,您希望在该列中返回什么评论并不明显。
在此处查看 SQL Fiddle 演示。
编辑
对不起,误解了您的问题:-) 此查询将正确返回所有评论,以及发布评论的人以及该人发表的评论总数:
SELECT Posts.ID,
member.Name,
(SELECT COUNT(*) FROM Posts WHERE member.ID = Posts.user_id) AS total,
Posts.comment
FROM Posts
INNER JOIN member ON Posts.user_id = member.ID
GROUP BY Posts.ID, member.Name, member.ID, Posts.comment;
在此处查看更新的 SQL Fiddle 演示。
您可以使用子查询来计算每个成员的帖子总数:
select m.ID
, m.Name
, coalesce(grp.total, 0)
, p.comment
from member m
left join
posts p
on p.user_id = m.id
left join
(
select user_id
, count(*) as total
from posts
group by
user_id
) grp
on grp.user_id = m.id
select
a.id
, a.name
, count(1) over (partition by b.user_id) as TotalCountPerUser
, b.comment
from member a join post b
on a.id = b.user_id