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

MySQL hvordan inkluderer jeg ikke duplikerede rækker, når jeg bruger SUM og COUNT med flere INNER JOINS?

Her er en løsning. Reducer først sættet til adskilte rækker i en afledt tabel, og anvend derefter GROUP BY på det resultat:

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

Du bruger DISTINCT(pc.library_id) i dit eksempel, som om DISTINCT kun gælder for kolonnen inde i parentesen. Dette er en almindelig misforståelse. DISTINCT gælder for alle kolonner på valglisten. DISTINCT er ikke en funktion; det er en forespørgselsmodifikator.




  1. Mysql optimeringsværktøj

  2. PostgreSQL langsom på et stort bord med arrays og masser af opdateringer

  3. Start og udfyldning af en Postgres-container i Docker

  4. Er der en måde at bruge ARRAYs i Entity Framework + PostgreSql