sql >> Database >  >> RDS >> Mysql

MySQL hoe voeg ik geen dubbele rijen toe als ik SUM en COUNT gebruik met meerdere INNER JOINS?

Hier is een oplossing. Verlaag eerst de set tot afzonderlijke rijen in een afgeleide tabel en pas vervolgens de GROUP BY toe op dat resultaat:

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

U gebruikt DISTINCT(pc.library_id) in uw voorbeeld, alsof DISTINCT alleen van toepassing is op de kolom tussen haakjes. Dit is een veel voorkomende misvatting. DISTINCT is van toepassing op alle kolommen van de selectielijst. DISTINCT is geen functie; het is een query-modifier.




  1. Mysql:Uitvoeren van NIET BESTAAT. Is het mogelijk om de prestaties te verbeteren?

  2. PDO stuurt onbewerkte query naar MySQL terwijl Mysqli voorbereide query verzendt, beide produceren hetzelfde resultaat

  3. Instellen en identificeren van rijdoelen in uitvoeringsplannen

  4. Rij verwijderen met een Mysql-trigger