اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم

هل يمكن المساعدة في فهم ال queries هنا 

المسالة في الصورة وهذا الكود الخاص بي ولكن لا يعمل مالسبب

# Write your MySQL query statement below
select product_id, IF ( max(change_date) <= '2019-08-16',new_price, 10) as price from Products
group by product_id

 

Screenshot (135).png

 

تم التعديل في بواسطة Ahmed Ebrahim11

Recommended Posts

  • 0
نشر

المشكلة في استعلامك هو أنه يتحقق فقط من أقصى تاريخ، بينما المطلوب هو الحصول على آخر سعر قبل التاريخ المحدد لذا عدله للتالي:

SELECT product_id,
    COALESCE(
        (SELECT new_price 
         FROM Products p2 
         WHERE p2.product_id = p1.product_id 
         AND p2.change_date <= '2019-08-16'
         ORDER BY change_date DESC 
         LIMIT 1),
        10
    ) as price
FROM Products p1
GROUP BY product_id;

بحيث نستخدم استعلام فرعي للحصول على آخر سعر قبل '2019-08-16' و COALESCE يرجع 10 إذا لم يجد سعرا قبل التاريخ المحدد

وأخيرا ORDER BY change_date DESC LIMIT 1 يجلب أحدث سعر.

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

نحن هنا على موقع الأكاديمية لا نقوم بحل أسئلة الإختبارات ولكن نستطيع إرشادك إلى الحل الصحيح .

لاحظ المشكلة لديك في الإستعلام أنك تقوم بوضع شرط إذا كان أقصى تاريخ للتعديل أقل من أو يساوي '2019-08-16' فهنا أنت ستأخذ قيمة new_price وإلا فسيتم وضع قيمة 10 تلقائيا .

الخطأ في الشرط عندما يكون قيمة max(change_date) أكبر من  '2019-08-16' ولكن المنتج لديه تعديل للسعر قبل هذا التاريخ هنا الإستعلام الخاص بك سيضع 10 بدلا من أخذ السعر قبل التاريخ  '2019-08-16' .

وأيضا يوجد خطأ أخر لديك أنه في  MAX() تستخدمها لتحديد آخر تاريخ تعديل، ولكن العمود new_price غير مجمع أى أن mysql لا تستطيع التعامل معه وتجميعه إذا كان هناك أكثر من حقل له نفس ال product_id . و هذا يؤدي إلى نتائج غير متوقعة لأن قيمة new_price لن تتوافق مع تاريخ التعديل المحدد.

لذلك يجب عليك في الحل أولا البحث عن التواريخ التي أقل من أو تساوي   '2019-08-16' وحينها تأخذ قيمة new_price لأعلي تاريخ .

أما إذا كان هنا منتج لا توجد لديه تعديلات قبل تاريخ   '2019-08-16' فإذا تضع رقم 10.

  • 0
نشر
بتاريخ 1 دقيقة مضت قال محمد عاطف17:

وعليكم السلام ورحمة الله وبركاته.

نحن هنا على موقع الأكاديمية لا نقوم بحل أسئلة الإختبارات ولكن نستطيع إرشادك إلى الحل الصحيح .

لاحظ المشكلة لديك في الإستعلام أنك تقوم بوضع شرط إذا كان أقصى تاريخ للتعديل أقل من أو يساوي '2019-08-16' فهنا أنت ستأخذ قيمة new_price وإلا فسيتم وضع قيمة 10 تلقائيا .

الخطأ في الشرط عندما يكون قيمة max(change_date) أكبر من  '2019-08-16' ولكن المنتج لديه تعديل للسعر قبل هذا التاريخ هنا الإستعلام الخاص بك سيضع 10 بدلا من أخذ السعر قبل التاريخ  '2019-08-16' .

وأيضا يوجد خطأ أخر لديك أنه في  MAX() تستخدمها لتحديد آخر تاريخ تعديل، ولكن العمود new_price غير مجمع أى أن mysql لا تستطيع التعامل معه وتجميعه إذا كان هناك أكثر من حقل له نفس ال product_id . و هذا يؤدي إلى نتائج غير متوقعة لأن قيمة new_price لن تتوافق مع تاريخ التعديل المحدد.

لذلك يجب عليك في الحل أولا البحث عن التواريخ التي أقل من أو تساوي   '2019-08-16' وحينها تأخذ قيمة new_price لأعلي تاريخ .

أما إذا كان هنا منتج لا توجد لديه تعديلات قبل تاريخ   '2019-08-16' فإذا تضع رقم 10.

شكرا استاذي

ولكن هذا ليس اختبار اقوم فقط بالتدريب علي leetcode 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...