Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL, comment ne pas inclure de lignes en double lorsque j'utilise SUM et COUNT avec plusieurs INNER JOINS ?

Voici une solution. Commencez par réduire l'ensemble à des lignes distinctes dans une table dérivée, puis appliquez le GROUP BY à ce résultat :

SELECT SUM(case when d.status = 2 then d.value end) as 'val_accepted'
FROM (
  SELECT DISTINCT p.id, p.status, p.value, pc.library_id
  FROM props p
  INNER JOIN p_contents AS pc ON p.id = pc.prop_id
  INNER JOIN contents AS c ON c.id = pc.library_id
  WHERE p.account_id = 3) AS d
GROUP BY d.library_id

Vous utilisez DISTINCT(pc.library_id) dans votre exemple, comme si DISTINCT ne s'appliquait qu'à la colonne entre parenthèses. C'est une idée fausse commune. DISTINCT s'applique à toutes les colonnes de la liste de sélection. DISTINCT n'est pas une fonction; c'est un modificateur de requête.