La combinación de múltiples consultas SQL
Pregunta
Quiero hacer una consulta a la lista gatos que tuvieron más tiempo que los gatos promedio para vender? Tengo cinco tablas:
animal, venta, AnimalOrderItem, AnimalOrder y SaleAnimal
Mesa Animal: AnimalID, nombre, categoría (Gato, perro, pescado)
SaleAnimal tabla: SaleID, AnimalID, SalePrice
mesa de venta: SaleID, fecha, employeeID, CustomerID
Mesa AnimalOrderItem: IdPedido, AnimalID, el costo
AnimalOrder: IdPedido, FechaPedido, Fecha de recepción, IdProveedor, shippingcost, EmployeeID
Hay otras tablas que no piensan que tienen un efecto sobre la consulta.
pensé en lo siguiente ... hacer una consulta para calcular días para vender a todos los ex:.
[SaleDate]-[ReceiveDate] AS DaysToSell
Have the INNER JOIN built:
Sale INNER JOIN ((AnimalOrder INNER JOIN (Animal INNER JOIN AnimalOrderItem
ON Animal.AnimalID = AnimalOrderItem.AnimalID) ON AnimalOrder.
OrderID = AnimalOrderItem.OrderID) INNER JOIN SaleAnimal ON Animal.
AnimalID = SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID
Cree otra consulta basada en la consulta anterior
SELECT AnimalID, Name, Category, DaysToSell
WHERE Category="Cat" AND DaysToSell>
(SELECT Avg(DaysToSell)
FROM the earlier query
WHERE Category="Cat"
ORDER BY DaysToSell DESC;
Después de ejecutar la consulta que me dice error
ORA-00921: final inesperado de SQL comando
Cualquier sugerencia! por favor
Solución
Las consultas se pueden combinar con una subconsulta. Por ejemplo,
select *
from (
select *
from mytable
) subquery
La aplicación de este modelo a su problema parece bastante sencillo.
Otros consejos
No veo el soporte cerrado que coincide con el promedio de selección
Ok, he venido con esto:
SELECT AnimalID, Name, Category,
[SaleDate]-[ReceiveDate] AS DaysToSell
FROM Sale INNER JOIN ((AnimalOrder INNER JOIN (Animal INNER JOIN AnimalOrderItem ON Animal.AnimalID = AnimalOrderItem.AnimalID) ON AnimalOrder.OrderID = AnimalOrderItem.OrderID)
INNER JOIN SaleAnimal ON Animal.AnimalID = SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID
WHERE Category = "Cat"
AND ([SaleDate]-[ReceiveDate]) > (SELECT AVG([SaleDate]-[ReceiveDate])
FROM Sale INNER JOIN ((AnimalOrder INNER JOIN (Animal INNER JOIN AnimalOrderItem ON Animal.AnimalID = AnimalOrderItem.AnimalID) ON AnimalOrder.OrderID = AnimalOrderItem.OrderID)
INNER JOIN SaleAnimal ON Animal.AnimalID =SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID
WHERE Category = "Cat")
ORDER BY ([SaleDate]-[ReceiveDate]) DESC;