/ / Requête MySQL - Plusieurs sommes sur plusieurs tables, il faut ignorer les valeurs NULL - mysql, sql

Requête MySQL - Plusieurs sommes sur plusieurs tables, nécessité d'ignorer les valeurs NULL - mysql, sql

J'essaie de faire la somme ci-dessous de la somme de thumbsup moinsthumbsdown de 5 tables différentes et ensuite SUM toutes ces valeurs ensemble, ce qui fonctionne si tous les "commthumbs" renvoient une ligne, mais si un ou plusieurs des "commthumbs" n'ont pas de lignes, ils retournent une valeur null. J'ai essayé d'utiliser IFNULL comme indiqué dans le premier LEFT JOIN ci-dessous à titre d'exemple. J'ai également essayé ISNULL et COALESCE à la place d'IFNULL mais je n'arrive toujours pas à le faire fonctionner. Des suggestions sur ce que je ne fais pas bien?

    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;

Réponses:

0 pour la réponse № 1

Essaye ça

  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;