Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: bewa en 5 Abril 2012, 12:52 pm



Título: Consulta en Mysql [solucionado]
Publicado por: bewa en 5 Abril 2012, 12:52 pm
Vuelvo con mi particular batalla con mysql xD

Esta vez parece facilita y sólo hay que coger datos de una tabla pero no me sale.
La tabla es esta:
(http://i.imgur.com/lamK1.png)

Hay que obtener los precios máximos por tipo de producto (descripción) con los siguientes datos: codprod, descripcion, preciomax

Yo he hecho esto:

SELECT CODPROD, DESCRIPCION, MAX(PVP) AS PRECIOMAX
FROM PRODUCTOS
GROUP BY DESCRIPCION
;

Y me da como resultado:

(http://i.imgur.com/AZjg7.png)

Los codprod no me coinciden. Me tendría que salir algo como:

(http://i.imgur.com/xUKKi.png)



Título: Re: Consulta en Mysql
Publicado por: Runex en 5 Abril 2012, 12:59 pm
Vuelvo con mi particular batalla con mysql xD

Esta vez parece facilita y sólo hay que coger datos de una tabla pero no me sale.
La tabla es esta:
(http://i.imgur.com/lamK1.png)

Hay que obtener los precios máximos por tipo de producto (descripción) con los siguientes datos: codprod, descripcion, preciomax

Yo he hecho esto:

SELECT CODPROD, DESCRIPCION, MAX(PVP) AS PRECIOMAX
FROM PRODUCTOS
GROUP BY DESCRIPCION
;

Y me da como resultado:

(http://i.imgur.com/AZjg7.png)

Los codprod no me coinciden. Me tendría que salir algo como:

(http://i.imgur.com/xUKKi.png)



Si no me equivoco es porque los ordenas por descripcion y no por codprod,
prueba así:

Código
  1. SELECT CODPROD, DESCRIPCION, MAX(PVP) AS PRECIOMAX FROM PRODUCTOS GROUP BY CODPROD;
  2.  


Título: Re: Consulta en Mysql
Publicado por: bewa en 5 Abril 2012, 13:08 pm
Nop, porque el precio máximo de un producto sólo es uno. Tengo que coger los productos de mayor precio por tipo (descripcion). Si lo hago así me sale:

(http://i.imgur.com/7b7a7.png)


Título: Re: Consulta en Mysql
Publicado por: Runex en 5 Abril 2012, 13:31 pm
Nop, porque el precio máximo de un producto sólo es uno. Tengo que coger los productos de mayor precio por tipo (descripcion). Si lo hago así me sale:

(http://i.imgur.com/7b7a7.png)

Creo que ya se cual puede ser el problema.
Al realizar esa consulta, toma como descripcion la primera ocurrencia de la descripcion con el precio máximo.
Es decir, si por ejemplo una descripcion es "tele" , hay más con el mismo nombre y una de todas presenta un precio mayor a las de su mismo nombre, tomará como ID del producto, la primera ocurrencia en la tabla.

He implementado tu misma tabla con los mismos registros en mi Pc, y he insertado una descripcion "mesa1" (nombre diferente a mesa") con codprod 11.
He realizado tu misma consulta y el resultado del codprod de la descripcion "cama1" ha sido el correcto, 11.

Así que, por el momento, creo que te va a tocar cambiar la descripcion de cada una de ellas,
mesa1,mesa2,mesa3...

(http://i39.tinypic.com/nch4hv.png)

Así te funcionará con esa consulta.

Un saludo bewa :)


Título: Re: Consulta en Mysql
Publicado por: bewa en 5 Abril 2012, 13:37 pm
Ese el el problema, que coge los 4 primeros codprod y no los que tiene que coger. Pero las descripciones no las puedo cambiar porque está puesto así a mala leche digamos xD.

Un saludo Runex y gracias!!


Título: Re: Consulta en Mysql
Publicado por: Runex en 5 Abril 2012, 13:40 pm
Si lo que quieres es que quede igual que la imágen y es por un ejercicio o algo puedes hacerles trampa.

Pon varios registro mesa,mesa1,mesa2,cama,cama1,cama2 etc.

Y pones el precio mayor a mesa,cama...

Quedará igual que la imágen te lo aseguro jaja :D.

Un saludo bewa y de nada para eso estamos, si se me ocurre algo más te lo digo :)


Título: Re: Consulta en Mysql
Publicado por: bewa en 5 Abril 2012, 14:16 pm
Madre mía. ¿He dicho que parecía facilita? lo retiro xD

La he sacado y todavía como que no termino de asimilar del todo.

La solución es ésta:

SELECT CODPROD, DESCRIPCION, MAX(PVP) AS PRECIOMAX
FROM PRODUCTOS
WHERE CODPROD IN(SELECT CODPROD FROM PRODUCTOS
WHERE PVP IN (SELECT MAX(PVP) FROM PRODUCTOS
GROUP BY DESCRIPCION)
)
GROUP BY DESCRIPCION
;


Título: Re: Consulta en Mysql [solucionado]
Publicado por: Runex en 6 Abril 2012, 15:57 pm
Madre mía. ¿He dicho que parecía facilita? lo retiro xD

La he sacado y todavía como que no termino de asimilar del todo.

La solución es ésta:

SELECT CODPROD, DESCRIPCION, MAX(PVP) AS PRECIOMAX
FROM PRODUCTOS
WHERE CODPROD IN(SELECT CODPROD FROM PRODUCTOS
WHERE PVP IN (SELECT MAX(PVP) FROM PRODUCTOS
GROUP BY DESCRIPCION)
)
GROUP BY DESCRIPCION
;

Jaja menuda monstruosidad de consulta, es la primera vez que veo ese IN() en SQL, que función realiza, la misma que en otros lenguajes?

Un saludo :)