24/10/2015, 09:24
|
| Colaborador | | Fecha de Ingreso: septiembre-2009 Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses Puntos: 214 | |
Respuesta: Agrupar resultados y ordenarlos Saludo
Uhm, a ver.
Vamos a suponer que tengo estos datos.
Código HTML:
Ver originalid id_t nombre precio 1 1 producto1 30 2 1 producto2 45 3 1 producto3 16 4 2 producto4 4 5 2 producto5 8 6 2 producto6 15 7 3 producto7 189 8 3 producto8 48 9 3 producto9 58
Uno tal vez esperaría que el resultado fuese
Código HTML:
Ver originalid id_t nombre precio 4 2 producto4 4 3 1 producto3 16 8 3 producto8 48
Ahora, teniendo en cuenta el query propuesto:
Código SQL:
Ver originalSELECT * FROM productos GROUP BY id_t ORDER BY precio ASC
A primera vista, uno diría, así es. Sin embargo, sql tiene su forma de hacer las cosas
no tan explicitamente como nosotros quisieramos.
A detallar.
Primero hace el group by, obteniendo
Código HTML:
Ver originalid id_t nombre precio 1 1 producto1 30 4 2 producto4 4 7 3 producto7 189
Y luego sí aplica el order
Código HTML:
Ver originalid id_t nombre precio 4 2 producto4 4 1 1 producto1 30 7 3 producto7 189
Esto quiere decir que primero agrupo,
y luego a este grupo de datos le aplicó el order. Para solventar esto, yo propongo traer el precio mínimo de un producto
de cada grupo obtenido, y ordenar por ese campo.
Código SQL:
Ver originalSELECT *, MIN(precio) minimo FROM productos GROUP BY id_t ORDER BY minimo
Obteniendo esto
Código HTML:
Ver originalid id_t nombre precio minimo 4 2 producto4 4 4 1 1 producto1 30 16 7 3 producto7 189 48
Aquí ya nos trajo bien los precios mínimos,
pero la información de los productos es el resultado del group by,
no la esperada.
Así el asunto, propongo este query:
Código SQL:
Ver originalSELECT * FROM productos WHERE precio IN ( SELECT MIN(precio) minimo FROM productos GROUP BY id_t ORDER BY minimo ASC ) ORDER BY precio ASC
Obteniendo
Código HTML:
Ver originalid id_t nombre precio 4 2 producto4 4 3 1 producto3 16 8 3 producto8 48
Sin embargo, quise hacer el mismo query por EXISTS y no obtengo
el mismo resultado, pero ya es más por cosa mía. Con el IN te basta a tí.
Finalmente, tal vez invocando a gnzsoloyo ,
a él sí se le haga claro el camino para hacerlo por EXISTS.
__________________ "Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com |