sql >> Databasteknik >  >> RDS >> Mysql

MySQL hur inkluderar jag inte dubbletter av rader när jag använder SUM och COUNT med flera INNER JOINS?

Här är en lösning. Reducera först uppsättningen till distinkta rader i en härledd tabell och använd sedan GROUP BY på det resultatet:

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 använder DISTINCT(pc.library_id) i ditt exempel, som om DISTINCT bara gäller kolumnen inom parentesen. Detta är en vanlig missuppfattning. DISTINCT gäller för alla kolumner i urvalslistan. DISTINCT är inte en funktion; det är en frågemodifierare.




  1. Hur man ändrar text till gemener i SQL

  2. mysql-replikering - slavserver på en databas

  3. MySQL Stored Procedures, Pandas och Use multi=True när du kör flera satser

  4. Hantera frysning i PostgreSQL