Mysql – UNION ALL y GROUP BY u ORDER BY

Un ejemplo de cómo utilizar en Mysql las sentencias con UNION ALL y GROUP BY u ORDER BY.

MYSQL – UNION ALL

Cuando en MySql se utiliza el UNION ALL, estamos uniendo los resultados de varias consultas. Para ello, debe cumplirse varias condiciones, entre la que estan que sean las mismas columnas.

Pongamos un ejemplo en el que unimos los resultados de dos consultas, una al trabajador con su trabajo y otra el trabajador con su hogar. De las dos consultas sacamos los mismos datos: id, nombre, apellidos y direccion (nótese que dirección es diferente en cada consulta).

SELECT Id, Nombre, Apellidos, Direccion
FROM (
    SELECT Trabajador.Id, Trabajador.Nombre, Trabajador.Apellidos, Trabajo.Direccion
    FROM Trabajador, Trabajo
    WHERE Trabajador.vacacion = Trabajo.id

    UNION ALL

    SELECT Trabajador.Id, Trabajador.Nombre, Trabajador.Apellidos, Hogar.Direccion
    FROM Trabajador, Hogar
    WHERE Trabajador.hogar = Hogar.id
) Trabajadores
GROUP BY Id

MYSQL – GROUP BY

Si esta unión la envolvemos en otro select, podremos asignar el Group By para que agrupe los que tengan el mismo Id.

En el caso de tener varias lineas con los mismos Id, Mysql los agruparía en uno solo. Como en teoría, en este ejemplo, los datos son los mismos, no pasaría nada en agruparlos.

114 | Toni | González Pelayo | C/ de los atunes (de la primera consulta)
114 | Toni | González Pelayo | C/ de los atunes (de la segunda consulta)

Al poner el GROUP BY Id haremos que estas dos líneas se unan en una sola porque tienen el mismo Id (114),

En otros casos, el agruparlo haría que se perdieran datos. Entonces, deberíamos tenerlo en cuenta

114 | Toni | González Pelayo | C/ de los atunes (de la primera consulta)
114 | Toni | González Pelayo | C/ de los besugos (de la segunda consulta)

Al unirlos, una de las direcciones se perderían. Atentos a esto.

ORDER BY

Esta orden, haría que ordenáramos los registros según en campo que le indiquemos al ORDER BY

ORDER BY Id ASC

De esta manera, ordenaríamos por Id de forma ascendente.

Bien, este post mas que informativo está destinado a los que se puedan encontrar con el problema de unir consultas y luego querer hacer un GROUP BY o un ORDER BY de la unión.

Espero que os sea de utilidad este artículo para conocer un pococ más Mysql con las opciones UNION ALL y GROUP BY u ORDER BY


Más información