Access - Agrupamiento en consultas

 
Vista:

Agrupamiento en consultas

Publicado por Ignacio (231 intervenciones) el 05/11/2002 14:48:07
Tengo una tabla con tres campos:
NombreProducto
idCategoría (categoria del producto)
PrecioUnidad

y deseo averiguar el producto mas caro de cada categoría. Con el agrupamiento normal no sirve porque para ver el nombre debo seleccionar ese campo y entonces ya no agrupa por categoría y me saca todos. Si no selecciono el campo nombre efectivamente me saca el precio del producto mas caro de cada categoría pero desconozco de que producto se trata.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Agrupamiento en consultas

Publicado por Pancho (149 intervenciones) el 05/11/2002 18:53:18
Hola

He aqui la solucion a tu problema, debes escribir este comando SQL en la consulta a realizar:

SELECT ID_CATEGORIA, NOMBRE_PRODUCTO,PRECIO_UNIDAD
FROM PRODUCTOS WHERE ID_CATEGORIA = ANY (SELECT ID_CATEGORIA FROM PRODUCTOS GROUP BY ID_CATEGORIA ) AND PRECIO_UNIDAD = ANY (SELECT MAX(PRECIO_UNIDAD) FROM PRODUCTOS GROUP BY ID_CATEGORIA);

Saludos

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Agrupamiento en consultas

Publicado por Ignacio (231 intervenciones) el 06/11/2002 14:56:06
Ingenioso pero no vale. Primero creo que el primer ANY sobra y segundo ocurre lo siguiente. Tu le está diciendo que te seleccione el producto cuyo precio coincide con la selección previa de max por categoría, con lo cual si el precio max de una categoría coincide con el precio de otro producto de otra categoría vas a obtener datos erroneos como efectivamente ocurre. De cualquier forma me has abierto una vía interesante.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Agrupamiento en consultas

Publicado por Ignacio (231 intervenciones) el 06/11/2002 15:12:39
Lo tengo.

Te creas una primera consulta llamada conMaxPorCategoria en la que calculas el precio max por categoría y después la siguiente:
SELECT Productos.IdCategoría, Productos.NombreProducto, Productos.PrecioUnidad
FROM conMaxPorCategoria INNER JOIN Productos ON conMaxPorCategoria.IdCategoría = Productos.IdCategoría
WHERE (((Productos.PrecioUnidad)=[MáxDePrecioUnidad]));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Agrupamiento en consultas

Publicado por Pancho (149 intervenciones) el 06/11/2002 16:42:56
Hola

Si tienes razon, en lo que has dicho, ya que solo probe con tan solo 10 registros nada mas, la solucion que has dejado la habia pensado antes tambien, aunque mi objetivo era no crear un Query con los valores maximos por categoria sino obtener el resultado con una sola instruccion SELECT y creo que tu y yo estamos cerca de lograrlo, analizando la instruccion anterior que dejaste tambien funciona de la siguiente manera:

SELECT Productos.IdCategoría, Productos.NombreProducto, Productos.PrecioUnidad
FROM conMaxPorCategoria INNER JOIN Productos ON conMaxPorCategoria.IdCategoría = Productos.IdCategoría
AND conMaxPorCategoria.MáxDePrecioUnidad=Productos.PrecioUnidad;

como ves aqui hay dos relaciones uno a uno sobre dos campos distintos sin necesidad de usar un WHERE

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar