La combinaison de plusieurs requêtes SQL
Question
Je veux faire une requête à la liste des chats qui ont plus que les chats en moyenne pour vendre? J'ai cinq tables:
Animal, Vente, AnimalOrderItem, AnimalOrder et SaleAnimal
Tableau animale: AnimalID, Nom, Catégorie (Chat, chien, poisson)
SaleAnimal tableau: SaleID, AnimalID, SalePrice
Tableau de vente: SaleID, date, employeeID, CustomerID
Tableau de AnimalOrderItem: OrderID, AnimalID, coût
AnimalOrder: OrderID, OrderDate, Date de réception, SupplierID, shippingcost, EmployeeID
Il y a d'autres tables, je ne pense pas qu'ils ont un effet sur la requête.
Je pensais à ce qui suit ... faire une requête pour calculer jours à vendre pour tous les 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
Créer une autre requête basée sur la requête ci-dessus
SELECT AnimalID, Name, Category, DaysToSell
WHERE Category="Cat" AND DaysToSell>
(SELECT Avg(DaysToSell)
FROM the earlier query
WHERE Category="Cat"
ORDER BY DaysToSell DESC;
Après l'exécution de la requête de ce que je suis erreur en disant
ORA-00921: fin inattendue de SQL commande
Toutes les suggestions! s'il vous plaît
La solution
Les requêtes peuvent être combinées avec une sous-requête. Par exemple,
select *
from (
select *
from mytable
) subquery
En appliquant ce modèle à votre problème semble assez simple.
Autres conseils
Je ne vois pas le support fermé qui correspond à la select avg
Ok, je suis venu à ceci:
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;