Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دوال LEAD و LAG

جزء من قسم الأساسيات في رحلة SQL على Coddy — الدرس 61 من 72.

تسمح لنا دالتا LEAD و LAG بالوصول إلى قيمة الصف الحالي بمقدار n من الخطوات للخلف أو n من الخطوات للأمام.

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

idrevenuemonth
15325
24926
33937
47238
SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY MONTH) as prev_month_revenue
FROM table1 ORDER BY id

سيؤدي هذا إلى إنشاء الجدول التالي:

idrevenueprev_month_revenue
1532 
2492532
3393492
4723393

بهذه الطريقة يمكننا حساب نسبة prev_month_revenue/revenue.

إذا استخدمنا بدلاً من ذلك دالة LEAD، فستأخذ إيرادات الشهر التالي لكل صف:

SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id
idrevenuenext_month_revenue
1532492
2492393
3393723
4723 
challenge icon

التحدي

سهل

الجداول والأعمدة المتاحة:

  • <strong>air_conditioners</strong>: <strong>id</strong>, <strong>efficiency</strong>, <strong>strength</strong>, <strong>month</strong>

قارن كفاءة كل مكيف هواء بكفاءة المكيف السابق له.

اكتب استعلاماً يعرض كفاءة كل مكيف هواء جنباً إلى جنب مع كفاءة مكيف الهواء السابق الذي تم تركيبه (بناءً على id). وأيضاً، احسب فرق الكفاءة بين مكيف الهواء الحالي والسابق. رتب النتيجة حسب <strong>id</strong> و <strong>efficiency</strong> بترتيب تصاعدي.

أعمدة المخرجات المتوقعة:

  • id
  • efficiency
  • previous_efficiency (باستخدام LAG)
  • efficiency_difference (الكفاءة الحالية - الكفاءة السابقة)

أخيراً بعد هذا الاستعلام، قم بتصفية الصفوف التي تحتوي على previous_efficiency فارغة أو efficiency_difference فارغة كما يلي:

SELECT * FROM (
    -- Your query here
)
WHERE previous_efficiency != 0

ورقة مرجعية

تسمح دالتا LAG و LEAD بالوصول إلى القيم من الصفوف السابقة أو التالية:

دالة LAG - تحصل على القيمة من الصف السابق:

LAG(column_name, n) OVER (ORDER BY column)

دالة LEAD - تحصل على القيمة من الصف التالي:

LEAD(column_name, n) OVER (ORDER BY column)

مثال على استخدام LAG للحصول على إيرادات الشهر السابق:

SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY month) as prev_month_revenue
FROM table1 ORDER BY id

مثال على استخدام LEAD للحصول على إيرادات الشهر التالي:

SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id

سيكون للصف الأول قيمة NULL لـ LAG، وسيكون للصف الأخير قيمة NULL لـ LEAD.

جرّب بنفسك

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات