دوال LEAD و LAG
جزء من قسم الأساسيات في رحلة SQL على Coddy — الدرس 61 من 72.
تسمح لنا دالتا LEAD و LAG بالوصول إلى قيمة الصف الحالي بمقدار n من الخطوات للخلف أو n من الخطوات للأمام.
على سبيل المثال، إذا أردنا حساب نسبة إيرادات الشركة للصف الحالي وقبل شهر واحد، يمكننا استخراج القيمة من الشهر السابق:
| id | revenue | month |
| 1 | 532 | 5 |
| 2 | 492 | 6 |
| 3 | 393 | 7 |
| 4 | 723 | 8 |
SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY MONTH) as prev_month_revenue
FROM table1 ORDER BY idسيؤدي هذا إلى إنشاء الجدول التالي:
| id | revenue | prev_month_revenue |
| 1 | 532 | |
| 2 | 492 | 532 |
| 3 | 393 | 492 |
| 4 | 723 | 393 |
بهذه الطريقة يمكننا حساب نسبة prev_month_revenue/revenue.
إذا استخدمنا بدلاً من ذلك دالة LEAD، فستأخذ إيرادات الشهر التالي لكل صف:
SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id| id | revenue | next_month_revenue |
| 1 | 532 | 492 |
| 2 | 492 | 393 |
| 3 | 393 | 723 |
| 4 | 723 |
التحدي
سهلالجداول والأعمدة المتاحة:
<strong>air_conditioners</strong>:<strong>id</strong>,<strong>efficiency</strong>,<strong>strength</strong>,<strong>month</strong>
قارن كفاءة كل مكيف هواء بكفاءة المكيف السابق له.
اكتب استعلاماً يعرض كفاءة كل مكيف هواء جنباً إلى جنب مع كفاءة مكيف الهواء السابق الذي تم تركيبه (بناءً على id). وأيضاً، احسب فرق الكفاءة بين مكيف الهواء الحالي والسابق. رتب النتيجة حسب <strong>id</strong> و <strong>efficiency</strong> بترتيب تصاعدي.
أعمدة المخرجات المتوقعة:
idefficiencyprevious_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.
جرّب بنفسك
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2الشروط
أساسيات الشروطالكلمة المفتاحية ANDالكلمة المفتاحية ORالكلمة المفتاحية NOTدمج شروط متعددةالأقواسالقيم المنطقية Booleans8الإحصاء
دوال التجميع المدمجة - الجزء الأولدوال التجميع المدمجة - الجزء الثانيالتجميع - الجزء الأولالتجميع - الجزء الثانيالاستعلامات الفرعية - الجزء الأولالاستعلامات الفرعية - الجزء الثانيمراجعة - متجر إجمالي الأرباحمراجعة - متجر السكوترمراجعة - متجر القهوة11دوال النافذة - الجزء الأول
دالة ROW_NUMBERمعيار ORDER BYمعيار PARTITION BYPARTITION و ORDERدوال LEAD و LAGملخص - LEAD و LAGملخص - الصورملخص - الصناديق3تنسيق محدد للنتائج
قيم Nullترتيب النتائج - الجزء الأولترتيب النتائج - الجزء الثانيمراجعة - شركة للأمن السيبرانيتحديد عدد السجلاتمراجعة - مصنع مركبات6تحديات تمهيدية
مراجعة - الانتخابات البرلمانيةمراجعة - اعتقال الشرطة للمجرمينمراجعة - حاوية مشروبات البارمراجعة - هندسة أعمدة جديدة9جداول متعددة
الربط الأساسي - الجزء الأولالربط الأساسي - الجزء الثانيمراجعة - الربط (Join)الربط الذاتي (Self Join)مراجعة - الربط الذاتي (Self Join)الاتحاد (Union)تبسيط الاستعلامات، الكلمة المفتاحية WITHمراجعة - استعلامات WITHمراجعة - مقاول العقارات12Window Functions الجزء الثاني
دوال RANK و DENSE_RANKمراجعة - RANK و DENSE_RANKدالة NTILEدوال التجميعمعيار ROWS و RANGE