我有3张这样的牌桌。我需要在一个查询中获得用户给出的总票数和总评论
用户表
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
答案 0 :(得分:1)
使用左连接
尝试此操作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
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) where cnt not in (0);
check here
答案 1 :(得分:0)
你应该考虑阅读: https://www.sitepoint.com/understanding-sql-joins-mysql-database/ 让我们知道你已经尝试过的......
答案 2 :(得分:0)
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开始,因为这是你最高的"数据表。然后用其外键User_Id
连接其他表。
在SELECT
声明中,您选择SUM
和COUNT
来获取投票总数和所有评论的计数。
希望能帮助您了解如何构建这些语句。如果有任何问题,请发表评论,我会更新我的答案。 :)
答案 3 :(得分:0)
试试这个:
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;