Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

MySQL: SubConsulta con Having

Estas en el tema de MySQL: SubConsulta con Having en el foro de Mysql en Foros del Web. Hola amigos, Estoy practicando el tema de las subconsultas, pero se me ha complicado cuando intento hacer una subconsulta "grande" por llamarla de alguna manera, ...
  #1 (permalink)  
Antiguo 25/09/2005, 10:07
 
Fecha de Ingreso: agosto-2005
Mensajes: 4
Antigüedad: 18 años, 8 meses
Puntos: 0
Información MySQL: SubConsulta con Having

Hola amigos,

Estoy practicando el tema de las subconsultas, pero se me ha complicado cuando intento hacer una subconsulta "grande" por llamarla de alguna manera, y utilizando el Having.

La situacion es la Sgte.
En la base de datos con la cual estoy practicando, tengo entre otras las Sgtes. tablas:
* Products, con los siguientes campos: ProductID, ProductName, UnitPrice
* Order_Details, con los siguientes campos: OrderID, ProductID, UnitPrice, Quantity
* Orders, con los siguientes campos: OrderID, CustomerID, EmployeeID, OrderDate

Lo que pretendo hacer es listar el identificador de producto (productid), su nombre (productname) y el monto anual calculado (sum(od.unitprice * od.quantity)) , de aquellos productos cuyas ventas del año 1998 hayan superado a las realizadas para el mismo producto durante el año 1997.

Entonces lo que pensé que era correcto hacer consiste en calcular primero lo referente a 1998, y luego usar exactamente las mismas sentencias para calcular lo referente a 1997, vinculadas ambas con un Having:

select p.productId, p.productname, sum(od.unitprice*od.quantity) as Monto
from products p inner join order_details od on (p.productID=od.productID) inner join orders o on (o.orderID=od.OrderID)
where year(o.orderdate)=1998
group by p.productID
having monto > (select sum(od1.unitprice*od1.quantity) as Monto1
from products p1 inner join order_details od1 on (p1.productID=od1.productID) inner join orders o1 on (o1.orderID=od1.OrderID)
where year(o1.orderdate)=1997
group by p1.productID)


Pero al ejecutar esto, recibo el Siguiente mensaje de error: "Subquery returns more than 1 row"
Y a pesar de que he tratado, no logro salir de esto...

Por favor, alguien me puede dar alguna idea ?
Recuerden que recien estoy empezando, uso apenas las pocas cosas que se y pretendo aprender bien el tema de las subconsultas y los Join antes de avanzar, por lo que agradeceré que cualquier recomendación que puedan aportar no incluya sentencias mas avanzadas...

Muchas gracias desde ya !, y que terminen bien el fin de semana .
  #2 (permalink)  
Antiguo 26/09/2005, 13:46
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Los operadores =, >, <, esperan compararse contra sólo 1 valor, por tanto, la subconsulta debe sólo devolver 1 campo y sólo 1 registro, osea un dato.
Hay operadores como IN que permiten un conjunto de resultados de un campo.
Deberás pensar otra forma de hacerlo.
  #3 (permalink)  
Antiguo 27/09/2005, 13:32
 
Fecha de Ingreso: agosto-2005
Mensajes: 4
Antigüedad: 18 años, 8 meses
Puntos: 0
Gracias Claudio.
Finalmente pude solucionarlo asi:

select p.productId, p.productname, sum(od.unitprice*od.quantity) as Monto
from products p inner join order_details od on (p.productID=od.productID) inner join orders o on (o.orderID=od.OrderID)
where year(o.orderdate)=1998
group by p.productID
having monto > (select sum(od1.unitprice*od1.quantity) as Monto1
from products p1 inner join order_details od1 on (p1.productID=od1.productID) inner join orders o1 on (o1.orderID=od1.OrderID)
where (year(o1.orderdate)=1997 And p.ProductId=p1.ProductId)
group by p1.productID)

Saludos...
  #4 (permalink)  
Antiguo 05/12/2008, 14:43
 
Fecha de Ingreso: diciembre-2008
Mensajes: 1
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: MySQL: SubConsulta con Having

holas, pregunta... tengo echo un programa en visual basic 6.0, mi motor de base es my sql. La cosa es que a la hora de imprimir un remito de venta no se como alimentar la consulta del comando del data envirnment para que imprima una sola vez la cabecera y tantas veces el detalle como elementos tenga. Pense que los select's anidados serian una solucion pero la verdad es que no logro que funcione la consulta, si alguien puede / quiere auxiliarme aqui dejo mi mail. [email protected]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:45.