Título: Problema con subconsultas en mysql [solucionado] Publicado por: bewa en 31 Marzo 2012, 20:13 pm A ver si alguien me puede ayudar porque me estoy volviendo loco xD. Pongo primero las tablas:
Tabla proveedores: (http://i.imgur.com/rglUH.png) Tabla pedidos: (http://i.imgur.com/Aum3h.png) Tabla piezas: (http://i.imgur.com/5RNIh.png) Tabla remesas: (http://i.imgur.com/EL5di.png) (http://i.imgur.com/MyPJx.png) Ejercicio: obtener el codigo pedido(NUMPED), fecha de pedido (FECHAP), codigo del proveedor(CODPROV), nombre del proveedor(NOMBRE) e importe de pedido de mayor valor. Bien, el importe de pedido es un campo calculado. Es el sumatorio de las cantidades (campo CTD en la tabla remesas) pedidas, multiplicadas por el precio de coste de las piezas. Esto lo he podido hacer: SELECT PEDIDOS.NUMPED, FECHAP, PROVEEDORES.CODPROV, NOMBRE, SUM(CTD*PRECIO) AS IMPORTEMAX FROM PEDIDOS, PROVEEDORES, REMESAS, PIEZAS WHERE PROVEEDORES.CODPROV=PEDIDOS.CODPROV AND PIEZAS.CODPIEZA=REMESAS.CODPIEZA AND PEDIDOS.NUMPED=REMESAS.NUMPED GROUP BY NUMPED ; Y me da esta tabla: (http://i.imgur.com/VGRl6.png) Pero necesito que sólo me aparezca el importe de pedido de mayor valor. Es decir, esta linea: (http://i.imgur.com/PNOrl.png) He intentado hacer: SELECT PEDIDOS.NUMPED, FECHAP, PROVEEDORES.CODPROV, NOMBRE, SUM(CTD*PRECIO) AS IMPORTEMAX FROM PEDIDOS, PROVEEDORES, REMESAS, PIEZAS WHERE PROVEEDORES.CODPROV=PEDIDOS.CODPROV AND PIEZAS.CODPIEZA=REMESAS.CODPIEZA AND PEDIDOS.NUMPED=REMESAS.NUMPED GROUP BY NUMPED HAVING IMPORTEMAX=(SELECT MAX(IMPORTEMAX)) ; Pero nada, me da un error. Supongo que hay que indicarle en el select del having la tabla donde está IMPORTEMAX pero IMPORTEMAX es un campo calculado. Así que no está en ninguna tabla. Título: Re: Problema con subconsultas en mysql Publicado por: HdM en 31 Marzo 2012, 20:59 pm Buenas.
Con el uso de "ORDER BY" y "LIMIT", deberías obtener el resultado deseado. Saludos. Título: Re: Problema con subconsultas en mysql Publicado por: bewa en 1 Abril 2012, 00:57 am Está curioso lo del limit xD, no lo había usado nunca. Así funciona:
SELECT PEDIDOS.NUMPED, FECHAP, PROVEEDORES.CODPROV, NOMBRE, SUM(CTD*PRECIO) AS IMPORTEMAX FROM PEDIDOS, PROVEEDORES, REMESAS, PIEZAS WHERE PROVEEDORES.CODPROV=PEDIDOS.CODPROV AND PIEZAS.CODPIEZA=REMESAS.CODPIEZA AND PEDIDOS.NUMPED=REMESAS.NUMPED GROUP BY NUMPED ORDER BY IMPORTEMAX DESC LIMIT 1 ; Lo que pasa es que me va a decir que esto es trampa :xD porque son ejercicios de subconsultas. Pero está muy bien pensado. Muchas gracias!!! Título: Re: Problema con subconsultas en mysql Publicado por: bewa en 1 Abril 2012, 01:52 am Al final lo he podido hacer con subconsultas. Lo dejo aquí solucionado:
SELECT PEDIDOS.NUMPED, FECHAP, PROVEEDORES.CODPROV, NOMBRE, SUM(PRECIO*CTD) AS IMPORTEMAX FROM PEDIDOS, PROVEEDORES, REMESAS, PIEZAS WHERE PEDIDOS.NUMPED=REMESAS.NUMPED AND PIEZAS.CODPIEZA=REMESAS.CODPIEZA AND PROVEEDORES.CODPROV=PEDIDOS.CODPROV GROUP BY NUMPED HAVING IMPORTEMAX >= ALL( SELECT SUM(PRECIO*CTD) FROM PIEZAS, REMESAS WHERE PIEZAS.CODPIEZA=REMESAS.CODPIEZA GROUP BY NUMPED ) ; |