سؤال

أنا تريد أن تجعل من الاستعلام إلى قائمة القطط التي استغرق وقتا أطول من متوسط القطط للبيع ؟ لدي خمسة الجداول:

الحيوان, بيع, 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top