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