Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL come faccio a non includere righe duplicate quando utilizzo SUM e COUNT con più INNER JOINS?

Ecco una soluzione. Per prima cosa riduci il set a righe distinte in una tabella derivata, quindi applica GROUP BY a quel risultato:

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

Utilizzi DISTINCT(pc.library_id) nel tuo esempio, come se DISTINCT si applicasse solo alla colonna tra parentesi. Questo è un malinteso comune. DISTINCT si applica a tutte le colonne dell'elenco di selezione. DISTINCT non è una funzione; è un modificatore di query.