Saltar al contenido

MYSQL LEFT JOIN y COUNT y GROUP BY

Si encuentras algún problema con tu código o proyecto, recuerda probar siempre en un entorno de testing antes aplicar el código al trabajo final.

Solución:

Su segunda consulta está bien. Simplemente agrupe por el usuario de la primera tabla. De lo contrario, convertirías tu left join en una inner join

SELECT
    u.name, 
    COUNT(rh.uid) AS cnt
FROM
    `user` u
LEFT JOIN
    user_rh rh
    ON (rh.uid = u.uid)
GROUP BY
    u.uid, u.name
ORDER BY
    u.name

  1. no transforma tu unir a la izquierda a una unir internamente. Es solo agrupar por su uid de user_rh cuando está vinculado al usuario. Tiene 3 uid diferentes (NULL, 2 y 1), por eso solo tiene 3 líneas en su resultado.

  2. cuando utiliza la cláusula de agrupación, puede seleccionar solo el campo con la agrupación agregada (como COUNT, SUM, AVG…) o el campo disponible en la cláusula de grupo. Puede omitir la agrupación, pero Mysql hará la agrupación por sí mismo, pero los resultados pueden no ser confiables, ya que elegirá la primera disponible. por eso tienes Beto se muestra en su resultado de 3 líneas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *