Kombinieren mehrerer SQL-Abfragen
Frage
Ich möchte eine Abfrage machen Katzen aufzulisten, die länger dauerte als der Durchschnitt Katzen zu verkaufen? Ich habe fünf Tabellen:
Tier, Verkauf, AnimalOrderItem, AnimalOrder und SaleAnimal
Tier Tabelle: AnimalID, Name, Kategorie (Katze, Hund, Fisch)
SaleAnimal Tabelle: SaleID, AnimalID, Saleprice
Verkauf Tabelle: SaleID, Datum, employeeID, CustomerID
AnimalOrderItem Tabelle: OrderID, AnimalID, Kosten
AnimalOrder: OrderID, Bestelldatum, Empfangsdatum, SupplierID, Versandkosten, EmployeeID
Es gibt andere Tabellen Ich glaube nicht, dass sie auf der Abfrage eine Wirkung haben.
Ich dachte an die folgende ... machen eine Abfrage Tage zu berechnen für alle ex zu verkaufen.
[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
Erstellen Sie eine weitere Abfrage auf der Basis der obigen Abfrage
SELECT AnimalID, Name, Category, DaysToSell
WHERE Category="Cat" AND DaysToSell>
(SELECT Avg(DaysToSell)
FROM the earlier query
WHERE Category="Cat"
ORDER BY DaysToSell DESC;
Nach der Abfrage es läuft ich habe Fehler sagen
ORA-00921: unerwartetes Ende der SQL Befehl
Irgendwelche Vorschläge! bitte
Lösung
Abfragen können mit einer Unterabfrage kombiniert werden. Zum Beispiel:
select *
from (
select *
from mytable
) subquery
Die Anwendung dieses Musters, um Ihr Problem scheint ziemlich einfach.
Andere Tipps
Ich sehe die geschlossene Klammer nicht, die mit Streichhölzern der select avg
Ok, ich habe mit dieser kommen:
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;