Mysql不在另一个表中时的总和为0
我有两张桌子:Mysql不在另一个表中时的总和为0,mysql,sum,Mysql,Sum,我有两张桌子: users: id | name | club_id | 1 Bob 4 2 Jane 5 3 Alex 4 4 Paul 4 5 Tom 4 points: user_id | club_id | amount(can vary) 1 4 10 1
users:
id | name | club_id |
1 Bob 4
2 Jane 5
3 Alex 4
4 Paul 4
5 Tom 4
points:
user_id | club_id | amount(can vary)
1 4 10
1 2 10
2 5 10
3 4 10
3 4 10
4 4 10
3 2 10
3 4 10
I need (where users.club_id = 4 AND points.club_id = 4):
user_id | name | sum(amount)
3 Alex 30
1 Bob 10
4 Paul 10
5 Tom 0
请注意,Tom在users中存在,但在points中没有任何条目,因此他的总和应为0。这就是我从用户那里抓取列表的原因
我也希望这能尽可能地提高效率(因此我在用户和积分方面都添加了club_id=4)试试这个:
SELECT
u.id,
u.name,
COALESCE(SUM(p.amount), 0) AS Totalpoints
FROM
(
SELECT *
FROM users
WHERE club_id = 4
) AS u
LEFT JOIN
(
SELECT *
FROM points
WHERE club_id = 4
) AS p ON p.user_id = u.id
GROUP BY u.id,
u.name;
请在此处查看它的实际操作:
SELECT
u.id,
u.name,
COALESCE(SUM(p.amount), 0) AS Totalpoints
FROM
(
SELECT *
FROM users
WHERE club_id = 4
) AS u
LEFT JOIN
(
SELECT *
FROM points
WHERE club_id = 4
) AS p ON p.user_id = u.id
GROUP BY u.id,
u.name;
请在此处查看它的实际操作:
select u.id, u.name, sum(if (p.amount is null, 0, p.amount)) as totalPoint
from
user u
left join
(select * from point p where p.club_id = 4)p
on u.id = p.user_id
where u.club_id=4
group by u.id
:试试这个查询
select u.id, u.name, sum(if (p.amount is null, 0, p.amount)) as totalPoint
from
user u
left join
(select * from point p where p.club_id = 4)p
on u.id = p.user_id
where u.club_id=4
group by u.id
:用户
1 | Bob
的总分应该是10分而不是20分,因为他在积分表中只有一项俱乐部id
=4分,那么总分应该是10分。我想这也行得通(没有尝试过)谢谢您的回答!用户1 | Bob
的总分应该是10分而不是20分,因为他在积分表中只有一个条目俱乐部id
=4分,那么总分应该是10分。我想这也行得通(没有尝试过)谢谢您的回答!