sql >> Base de Datos >  >> RDS >> Mysql

Unir a la izquierda, sumar y contar grupos por

Tu problema es que cuando tienes dos (o más) store filas y dos (o más) pics filas para un solo goods fila, terminas con el producto de todas las combinaciones de filas.

Para arreglar esto, haga su agregación antes de unirse:

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)