La combinazione di più query SQL
Domanda
Voglio fare una query per elencare i gatti che hanno avuto più di gatti in media da vendere? Ho cinque tabelle:
degli animali, Vendita, AnimalOrderItem, AnimalOrder, e SaleAnimal
Tavolo animali: AnimalID, Nome, Categoria (Gatto, cane, pesce)
SaleAnimal tavolo: SaleID, AnimalID, SalePrice
Tavolo Vendita: SaleID, data, employeeID, CustomerID
Tavolo AnimalOrderItem: OrderID, AnimalID, costo
AnimalOrder: OrderID, DataOrdine, Data di ricezione, IDFornitore, ShippingCost, EmployeeID
C'è altri tavoli che non pensano di avere un effetto sulla query.
ho pensato a quanto segue ... fare una query per calcolare giorni a vendere per tutti gli 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
Creare un'altra query basata sulla query di cui sopra
SELECT AnimalID, Name, Category, DaysToSell
WHERE Category="Cat" AND DaysToSell>
(SELECT Avg(DaysToSell)
FROM the earlier query
WHERE Category="Cat"
ORDER BY DaysToSell DESC;
Dopo aver eseguito l'interrogazione che ho ottenuto errore che dice
ORA-00921: end inaspettata di SQL comando
Qualche suggerimento! si prega
Soluzione
Le query possono essere combinati con una subquery. Ad esempio,
select *
from (
select *
from mytable
) subquery
L'applicazione di questo modello per il tuo problema sembra abbastanza semplice.
Altri suggerimenti
Non vedo la staffa chiusa che corrisponde con il select avg
Ok, mi è venuta in mente questo:
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;