Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: bewa en 31 Marzo 2012, 20:13 pm



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
                    )
;