|    
			
				24/10/2015, 09:24
			
			
			  | 
  |   |  | Colaborador |  |  Fecha de Ingreso: septiembre-2009 Ubicación: mortuoria 
						Mensajes: 3.805
					 Antigüedad: 16 años, 1 mes 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   precio1     1     producto1     302     1     producto2     453     1     producto3     164     2     producto4     4 5     2     producto5     86     2     producto6     157     3     producto7     1898     3     producto8     489     3     producto9     58
Uno tal vez esperaría que el resultado fuese
 
 
Código HTML:
 Ver originalid id_t nombre precio4     2     producto4 43     1     producto3 168     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 precio1     1     producto1     304     2     producto4     47     3     producto7     189
 Y luego sí aplica el order
 
 
Código HTML:
 Ver originalid id_t   nombre   precio 4     2     producto4     41     1     producto1     307     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 productosGROUP BY id_tORDER BY minimo
Obteniendo esto
 
 
Código HTML:
 Ver originalid id_t nombre precio minimo4     2     producto4 4         41     1     producto1 30       167     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 productosWHERE precio IN(SELECT MIN(precio) minimoFROM productos GROUP BY id_tORDER BY minimo ASC)ORDER BY precio ASC
Obteniendo
 
 
Código HTML:
 Ver originalid id_t nombre precio4     2     producto4 43     1     producto3 168     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    |