Saltar al contenido

COUNT me da números inflados después de hacer dos JOIN

Natalia

Nivel 3 ·

Quiero cantidad de pedidos y de reclamos por cliente: SELECT c.id, COUNT(p.id), COUNT(r.id) FROM clientes c LEFT JOIN pedidos p ON p.cliente_id = c.id LEFT JOIN reclamos r ON r.cliente_id = c.id GROUP BY c.id; Un cliente con 3 pedidos y 2 reclamos me aparece con 6 y 6.
196 vistas 5 respuestas 2 0

Respuestas 5

  1. Desiré R.

    Nivel 3 ·

    1 0

    Es la multiplicación de filas: al unir pedidos y reclamos del mismo cliente, cada pedido se combina con cada reclamo. 3 x 2 = 6 filas, y COUNT cuenta esas 6.

  2. Alberto M.

    Nivel 3 ·

    1 0

    Arreglo rápido: COUNT(DISTINCT p.id) y COUNT(DISTINCT r.id). Para conteos funciona.

  3. Desiré R.

    Nivel 3 ·

    0 0

    Pero si después querés sumar montos, DISTINCT no te salva. Lo correcto es agregar cada tabla por separado y recién después unir, por ejemplo con dos subconsultas (una que cuente pedidos por cliente_id y otra que cuente reclamos) y un LEFT JOIN de cada una contra clientes.

  4. Natalia

    Nivel 3 ·

    0 0

    Con DISTINCT ya me da 3 y 2. Pero voy a usar la versión con subconsultas porque después necesito sumar montos. Gracias!

  5. MaxiSaturno

    Nivel 3 ·

    0 0

    Este error aparece en todos los reportes alguna vez. Bienvenido al club jaja