MySQL запрос - несколько сумм по нескольким таблицам, необходимо игнорировать нулевые значения - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь выполнить приведенное ниже СУММУ thumbsup минус thumbsdown из 5 разных таблиц, а затем СУММИТЬ все эти значения вместе, что работает, если все «commthumbs» возвращает строку, но если один или несколько из «commthumbs» имеют нет строк, то он возвращает нулевое значение. Я попытался использовать IFNULL, как показано в первом левом соединении ниже в качестве примера. Я также попробовал 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;

1 Ответ

0 голосов
/ 01 мая 2018

Попробуйте это

  SELECT 
        user.userID, user.username,
        SUM(IFNULL(a.commthumbs,0)+IFNULL(b.commthumbs,0)+IFNULL(c.commthumbs,0)+IFNULL(d.commthumbs,0)) AS 'commthumbs', 
        IFNULL(e.fixthumbs,0) AS 'fixthumbs'
    FROM
        user

    LEFT JOIN (
        SELECT 
        userID, SUM(IFNULL(gameCommThUp,0)-IFNULL(gameCommThDown,0)) AS 'commthumbs'
        FROM
        gamecomm
        GROUP BY userID) a ON a.userID = user.userID

    LEFT JOIN (
        SELECT 
        userID, SUM(IFNULL(fixCommThUp,0)-IFNULL(fixCommThDown,0)) AS 'commthumbs'
        FROM 
        fixcomm
        GROUP BY userID) b ON b.userID = user.userID

    LEFT JOIN (
        SELECT 
        userID, SUM(IFNULL(replyCommThUp,0)-IFNULL(replyCommThDown,0)) AS 'commthumbs'
        FROM gamereply
        GROUP BY userID) c ON c.userID = user.userID

    LEFT JOIN (
        SELECT userID, SUM(IFNULL(fixReplyThUp,0)-IFNULL(fixReplyThDown,0)) AS 'commthumbs'
        FROM fixreply
        GROUP BY userID) d ON d.userID = user.userID

    LEFT JOIN (
        SELECT 
        userID, SUM(IFNULL(fixThUp,0)-IFNULL(fixThDown,0)) AS 'fixthumbs'
        FROM 
        fix
        GROUP BY userID) e ON e.userID = user.userID

    WHERE user.userID = 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...