Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL, wie füge ich keine doppelten Zeilen ein, wenn ich SUM und COUNT mit mehreren INNER JOINS verwende?

Hier ist eine Lösung. Reduzieren Sie zuerst die Menge auf verschiedene Zeilen in einer abgeleiteten Tabelle und wenden Sie dann GROUP BY auf dieses Ergebnis an:

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

Sie verwenden DISTINCT(pc.library_id) in Ihrem Beispiel, als ob DISTINCT nur für die Spalte innerhalb der Klammern gilt. Dies ist ein weit verbreiteter Irrtum. DISTINCT gilt für alle Spalten der Auswahlliste. DISTINCT ist keine Funktion; es ist ein Abfragemodifikator.