sql >> Base de Datos >  >> RDS >> Mysql

MySQL, ¿cómo no incluyo filas duplicadas cuando uso SUM y COUNT con múltiples INNER JOINS?

Aquí hay una solución. Primero reduzca el conjunto a filas distintas en una tabla derivada, luego aplique GROUP BY a ese resultado:

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

Usas DISTINCT(pc.library_id) en su ejemplo, como si DISTINCT se aplicara solo a la columna dentro de los paréntesis. Este es un error común. DISTINCT se aplica a todas las columnas de la lista de selección. DISTINCT no es una función; es un modificador de consulta.