veces unicos una tabla repite repeticiones registros numero las filas dato cuantas contar como columnas mysql join count group-by

unicos - count en mysql workbench



MySQL-Conteo de filas y problema de uniĆ³n izquierda (2)

Tengo 2 tablas, campañas y códigos de campaña:

campañas: id, partner_id, estado

campaign_codes: id, código, estado

Deseo obtener un recuento de todos los códigos de campaña para todas las campañas DONDE campaign_codes.status es igual a 0 O donde no hay registros campaign_codes para una campaña.

Tengo el siguiente SQL, pero por supuesto la instrucción WHERE elimina aquellas campañas que no tienen registros correspondientes en campaign_codes (también quiero aquellas campañas con cero campaign_codes)

SELECT c.id AS campaign_id, COUNT(cc.id) AS code_count FROM campaigns c LEFT JOIN campaign_codes cc on cc.campaign_id = c.id WHERE c.partner_id = 4 AND cc.status = 0 GROUP BY c.id


Optaría por algo como:

SELECT c.id AS campaign_id, COUNT(cc.id) AS code_count FROM campaigns c LEFT JOIN campaign_codes cc on cc.campaign_id = c.id AND cc.status = 0 -- Having this clause in the WHERE, effectively makes this an INNER JOIN WHERE c.partner_id = 4 GROUP BY c.id

Mover la cláusula AND a la cláusula join hace que la combinación tenga éxito o falle, lo que es crucial para mantener las filas resultantes donde no hay una fila coincidente en la tabla ''derecha''.

Si estuviera en WHERE , las comparaciones con NULL (donde no hay campaign_code) fallarían, y serían eliminados de los resultados.


SELECT c.id AS campaign_id, COUNT(cc.id) AS code_count FROM campaigns c LEFT JOIN campaign_codes cc on cc.campaign_id = c.id AND c.partner_id = 4 AND cc.status = 0 GROUP BY c.id