Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Junção à esquerda, soma e contagem de grupo por


Seu problema é que quando você tem duas (ou mais) store linhas e duas (ou mais) pics linhas para um único goods linha, você acaba com o produto de todas as combinações de linhas.

Para corrigir isso, faça sua agregação antes de ingressar:
SELECT 
  good.id, 
  good.title, 
  IFNULL(s.storerest, 0) AS storerest, 
  IFNULL(p.picscount, 0) AS picscount
FROM goods 
LEFT JOIN (
  SELECT goodid, sum(rest) AS storerest
  FROM store
  GROUP BY goodid
) s ON (goods.id = s.goodid) 
LEFT JOIN (
  SELECT goodid, count(id) AS picscount
  FROM pics
  GROUP BY goodid
) p ON (goods.id = p.goodid)