我有这两个表
字幕_请求
movie_id | user_id | sent
2002 | 1 | 1
2002 | 2 | 1
2002 | 3 | 1
2002 | 4 | 1
2002 | 5 | 1
2002 | 6 | 1
2002 | 7 | 1
2002 | 8 | 1
电子邮件时间表
movie_id | schedule_id
2002 | 1
2002 | 2
这是我的问题
SELECT SUM(a.sent) as sent FROM subtitles_request a
JOIN email_schedule c on c.movie_id=a.movie_id
问题出在查询SUM(a.sent) as sent
的这一部分。 sent
被重复,因为它们是 email_schedule 上连接的两行。因此,我得到的是 16
,而不是 8
。
如何解决,让 sent
列不会加倍?
最佳答案
您可以尝试在 email_schedule
的子查询中添加 DISTINCT movie_id
,因为 email_schedule
表中有两行 movie_id = 2002
,将与subtitles_request
表关联,其中movie_id = 2002
这样你就会得到2*8 = 16
数据行。
CREATE TABLE subtitles_request(
movie_id INT,
user_id INT,
sent INT
);
INSERT INTO subtitles_request VALUES (2002,1 ,1);
INSERT INTO subtitles_request VALUES (2002,2 ,1);
INSERT INTO subtitles_request VALUES (2002,3 ,1);
INSERT INTO subtitles_request VALUES (2002,4 ,1);
INSERT INTO subtitles_request VALUES (2002,5 ,1);
INSERT INTO subtitles_request VALUES (2002,6 ,1);
INSERT INTO subtitles_request VALUES (2002,7 ,1);
INSERT INTO subtitles_request VALUES (2002,8 ,1);
CREATE TABLE email_schedule
(
movie_id INT,
schedule_id INT
);
INSERT INTO email_schedule VALUES (2002, 1);
INSERT INTO email_schedule VALUES (2002, 2);
查询 1:
SELECT SUM(a.sent) as sent
FROM subtitles_request a
JOIN (SELECT DISTINCT movie_id FROM email_schedule) c on c.movie_id=a.movie_id
Results :
| sent |
|------|
| 8 |
关于MySQL基于JOIN的列重复SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174870/