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ƞ您只需要将内部连接更改为左连接。更新了我的答案。