Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL como não incluo linhas duplicadas quando uso SUM e COUNT com vários INNER JOINS?


Aqui está uma solução. Primeiro reduza o conjunto para linhas distintas em uma tabela derivada e, em seguida, aplique o GROUP BY a esse 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

Você usa DISTINCT(pc.library_id) no seu exemplo, como se DISTINCT se aplicasse apenas à coluna dentro dos parênteses. Este é um equívoco comum. DISTINCT se aplica a todas as colunas da lista de seleção. DISTINCT não é uma função; é um modificador de consulta.