سؤال
أنا تريد أن تجعل من الاستعلام إلى قائمة القطط التي استغرق وقتا أطول من متوسط القطط للبيع ؟ لدي خمسة الجداول:
الحيوان, بيع, AnimalOrderItem, AnimalOrder ، SaleAnimal
الحيوان الجدول:AnimalID, اسم, الفئة (القط, الكلب, الأسماك)
SaleAnimal الجدول:SaleID, AnimalID, SalePrice
للبيع الجدول:SaleID ، تاريخ ، employeeID ، "معرف العميل"
AnimalOrderItem الجدول:OrderID, AnimalID, تكلفة
AnimalOrder:OrderID, OrderDate, ReceivingDate, SupplierID, ShippingCost, EmployeeID
هناك جداول أخرى أنا لا أعتقد أن لديهم تأثير على الاستعلام.
فكرت في ما يلي ...إجراء استعلام لحساب أيام لبيع جميع 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
إنشاء استعلام آخر بناء على ما سبق الاستعلام
SELECT AnimalID, Name, Category, DaysToSell
WHERE Category="Cat" AND DaysToSell>
(SELECT Avg(DaysToSell)
FROM the earlier query
WHERE Category="Cat"
ORDER BY DaysToSell DESC;
بعد تشغيل استعلام أنه علي خطأ تقول
ORA-00921:نهاية غير متوقعة SQL الأمر
أي اقتراحات!من فضلك
المحلول
استفسارات يمكن أن تكون جنبا إلى جنب مع فرعي.على سبيل المثال ،
select *
from (
select *
from mytable
) subquery
تطبيق هذا النمط الخاص بك المشكلة تبدو واضحة إلى حد ما.
نصائح أخرى
أنا لا أرى إغلاق قوس الذي يتطابق مع اختيار avg
حسنا, لقد جئت مع هذه:
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;