【发布时间】:2018-05-01 06:15:35
【问题描述】:
我正在尝试从 5 个不同的表中对 thumbsup 减去 thumbsdown 进行以下 SUM,然后将所有这些值加在一起,如果所有“commthumbs”都返回一行,但如果一个或多个“commthumbs”有没有行然后它返回一个空值。我尝试使用 IFNULL,如下面的第一个 LEFT JOIN 所示。我也尝试过 ISNULL 和 COALESCE 代替 IFNULL 但似乎仍然无法让它工作。关于我做错了什么有什么建议吗?
SELECT
user.userID, user.username,
SUM(a.commthumbs+b.commthumbs+c.commthumbs+d.commthumbs) AS 'commthumbs',
e.fixthumbs AS 'fixthumbs'
FROM
user
LEFT JOIN (
SELECT
userID, IFNULL(SUM(gameCommThUp-gameCommThDown),0) AS 'commthumbs'
FROM
gamecomm
GROUP BY userID) a ON a.userID = user.userID
LEFT JOIN (
SELECT
userID, SUM(fixCommThUp-fixCommThDown) AS 'commthumbs'
FROM
fixcomm
GROUP BY userID) b ON b.userID = user.userID
LEFT JOIN (
SELECT
userID, SUM(replyCommThUp-replyCommThDown) AS 'commthumbs'
FROM gamereply
GROUP BY userID) c ON c.userID = user.userID
LEFT JOIN (
SELECT userID, SUM(fixReplyThUp-fixReplyThDown) AS 'commthumbs'
FROM fixreply
GROUP BY userID) d ON d.userID = user.userID
LEFT JOIN (
SELECT
userID, SUM(fixThUp-fixThDown) AS 'fixthumbs'
FROM
fix
GROUP BY userID) e ON e.userID = user.userID
WHERE user.userID = 2;
【问题讨论】:
-
你能不能这样尝试:SUM(IFNULL(gameCommThUp,0)-IFNULL(gameCommThDown,0)) 在你所有的加入中
-
您正在对 SUM 进行 IFNULL 处理 - 正如您突出显示的那样,如果任何值为 null 则返回 null。根据上面的评论,您需要在求和之前将该值设为 IFNULL。