mysql从不同的表中获取值和用户计数之和
我有三张这样的桌子。我需要在一个查询中获得用户的总投票数和总评论 用户表mysql从不同的表中获取值和用户计数之和,mysql,Mysql,我有三张这样的桌子。我需要在一个查询中获得用户的总投票数和总评论 用户表 id username 1 A 2 B 3 C 4 D 5 E 投票表 id user_id value 1 2 1 2 3 1 3 1 1 4 4 1 5 1 1 评论表 id user_id 1 1 2 2 3 3 4 3 5 4 我
id username
1 A
2 B
3 C
4 D
5 E
投票表
id user_id value
1 2 1
2 3 1
3 1 1
4 4 1
5 1 1
评论表
id user_id
1 1
2 2
3 3
4 3
5 4
我需要这样的结果。我用左键连接。结果是双倍的。有人能帮忙吗
username total_votes total_number_of_verdict
A 2 1
B 1 1
C 1 2
D 1 1
你应该考虑阅读以下内容: 让我们知道你已经尝试了什么
SELECT UserTable.Username AS Username, SUM(VotesTable.Value) AS SUMVotes, COUNT(CommentTable.User_Id) AS SUMComments
FROM UserTable
LEFT JOIN VotesTable ON VotesTable.User_Id = UserTable.UserId
LEFT JOIN CommentsTable ON UserTable.User_Id = CommentsTable.User_Id
如果您愿意,您可以添加
WHERE UserTable.User_Id = @User_Id
这里要做的就是从Usertable开始,因为这是最高的Datatable。然后将其他表与其外键用户Id连接起来
在SELECTStatement中,您可以简单地选择SUM和COUNT以获得投票总数和他们撰写的所有评论的计数
希望这能帮助您理解如何构建这些语句。如果有任何问题,请发表评论,我将更新我的答案: 试试这个:
select u.username,
v.total_votes,
c.total_number_of_verdict
from users u left join (
select user_id, sum(value) total_votes
from votes
group by user_id
) v on u.id = v.user_id
left join (
select user_id, count(1) total_number_of_verdict
from comments
group by user_id
) c on u.id = c.user_id;
尝试使用左连接
SELECT u.username,COALESCE(p.cnt,0) AS post_count,COALESCE(c.cnt1,0) AS
post_count FROM users u
LEFT JOIN
(SELECT COUNT(*) AS cnt,uid FROM
votes GROUP BY uid ) p
ON (p.uid = u.id ) LEFT JOIN (SELECT COUNT(*) AS
cnt1,user_id FROM comments GROUP BY user_id ) c ON ( c.user_id = u.id);
如果您想忽略哪个用户没有获得命令和投票,请使用以下查询
SELECT u.username,COALESCE(p.cnt,0) AS post_count,COALESCE(c.cnt1,0) AS
post_count FROM users u
左连接
选择COUNT*作为cnt,uid FROM
按uid p分组表决
在p.uid=u.id左连接上选择COUNT*AS
cnt1,由c上的用户id c从评论组中选择的用户id。用户id=u.id,其中cnt不在0中;
判决的总数是多少?您使用的查询是什么?@ShaƞkarSBavaƞ他们使用的是什么我认为SUM返回一个Int。如果不是,您可以将您的类型转换为其他类型。类似这样的内容:CASTSUMVotesTable.Value作为Int感谢您的回答。它的作品。我想忽略那些没有投票和评论的用户。我的意思是如果用户没有投票和评论,结果会显示出来。我想忽略列表中的那些用户。只有当用户投票和评论时,结果才会显示出来。我想显示结果,如果用户至少给予投票或comments@ShaƞkarSBavaƞ您只需要将内部连接更改为左连接。更新了我的答案。