ازداد تعدد استخدامات SQL كلغة استعلام في نظام إدارة قواعد البيانات (DBMS) على مر السنين. فائدته الواسعة وتعدد استخداماته تجعله المفضل في جميع الأوقات لكل محلل بيانات.
هناك عدد غير قليل من وظائف المستوى المتقدم إلى جانب وظائف SQL العادية. تُعرف هذه الوظائف عمومًا بوظائف النافذة. إذا كنت تتعامل مع بيانات معقدة وتريد إجراء حسابات متقدمة ، فيمكنك استخدامها لتحقيق أقصى استفادة من بياناتك.
أهمية وظائف النوافذ
تتوفر العديد من وظائف النوافذ في SQL ، وسيساعدك كل منها في إجراء سلسلة من العمليات الحسابية. من إنشاء الأقسام إلى صفوف الترتيب أو تعيين أرقام الصفوف ، تقوم وظائف النافذة هذه بالقليل من كل شيء.
تكون وظائف النافذة مفيدة عندما تقوم بتطبيق وظائف مجمعة على مجموعة بيانات معينة أو مجموعة من الصفوف. تتجاوز هذه الوظائف وظائف التجميع التي توفرها GROUP BY. ومع ذلك ، فإن الاختلاف الرئيسي هو أنه ، على عكس وظيفة التجميع ، لا يتم دمج بياناتك في صف واحد.
لا يمكنك استخدام وظائف النافذة داخل ملف أين, من، و مجموعة من صياغات.
بناء جملة وظيفة النافذة
عندما تشير إلى أي وظيفة نافذة ، فأنت بحاجة إلى اتباع بنية بناء الجملة الافتراضية ، بحيث تعمل بشكل صحيح. إذا قمت ببناء الأمر بشكل غير صحيح ، فستتلقى خطأ وسيفشل تشغيل الكود الخاص بك.
إليك الصيغة الافتراضية:
يختار اسم العمود 1 ،
{window_function} (اسم العمود 2)
OVER ([PARTITION BY columnname1] [ORDER BY columnname3]) AS new_column
من table_name ؛
أين:
- coulmnname1 هو اسم العمود الأول الذي ترغب في تحديده.
- {window_function} هو اسم دالة مجمعة مثل sum أو avg أو count أو row_number أو Rank أو dense_rank.
- اسم العمود 2 هو اسم العمود الذي تقوم بتطبيق وظيفة النافذة عليه.
- اسم العمود 3 هو اسم العمود الثالث ، والذي سيشكل قاعدة التقسيم.
- new_column هي تسمية للعمود الجديد الذي يمكنك تطبيقه باستخدام مثل كلمة رئيسية.
- اسم الطاولة هو اسم الجدول المصدر.
تختلف وظائف النافذة عن بعض معظم أوامر SQL الأساسية. على عكس الوظائف المجمعة في SQL ، يمكنك استخدام وظائف النافذة هذه لأداء وظائف متقدمة.
تحضير مجموعة البيانات
يمكنك استخدام ال اصنع جدول بيان ل إنشاء جدول جديد في SQL. فيما يلي نموذج لمجموعة البيانات التي سيستخدمها هذا الدليل لتحديد بعض وظائف النافذة:
تاريخ الطلب |
فئة |
لون |
سعر البيع |
كمية |
---|---|---|---|---|
08-11-2016 |
الهواتف |
أسود |
907.152 |
6 |
12-06-2016 |
المجلدات |
أخضر |
18.504 |
3 |
11-10-2015 |
الأجهزة |
أصفر |
114.9 |
5 |
11-10-2015 |
الجداول |
بني |
1706.184 |
9 |
09-06-2014 |
الهواتف |
أحمر |
911.424 |
4 |
09-06-2014 |
ورق |
أبيض |
15.552 |
3 |
09-06-2014 |
المجلدات |
أسود |
407.976 |
3 |
09-06-2014 |
الأجهزة |
أصفر |
68.81 |
5 |
09-06-2014 |
المجلدات |
أخضر |
2.544 |
3 |
09-06-2014 |
تخزين |
البرتقالي |
665.88 |
6 |
09-06-2014 |
تخزين |
البرتقالي |
55.5 |
2 |
15-04-2017 |
الهواتف |
أسود |
213.48 |
3 |
05-12-2016 |
المجلدات |
أخضر |
22.72 |
4 |
22-11-2015 |
الأجهزة |
أخضر |
60.34 |
7 |
22-11-2015 |
كراسي جلوس |
بني غامق |
71.372 |
2 |
13-05-2014 |
أثاث |
البرتقالي |
190.92 |
5 |
شرح دالة المجموع
افترض أنك تريد حساب إجمالي المبيعات لكل قيمة داخل عمود الفئة. إليك كيف يمكنك القيام بذلك:
يختارفئة، لون،
sum (sale_price)
OVER (الترتيب حسب الفئة) AS total_sales
من عينة سهل.
في الكود أعلاه ، تسحب عبارة SQL الفئة واللون من مجموعة البيانات الأصلية. تضيف الدالة sum عمود sale_price (السعر_المخفَّض). يقوم بذلك حسب الفئة ، نظرًا لأن جملة OVER تحدد الترتيب حسب عمود الفئة. النتيجة النهائية هي كما يلي:
كيفية استخدام وظيفة النافذة Avg ()
مثل دالة الجمع ، يمكنك حساب المتوسط لكل صف من البيانات باستخدام متوسط وظيفة. بدلاً من المجموع ، ستحصل على عمود بمتوسط المبيعات.
يختارفئة، لون،
متوسط (السعر_المخفَّض)
OVER (الترتيب حسب الفئة) AS avg_sales
من عينة سهل.
تعلم كيفية استخدام وظيفة النافذة Count ()
على غرار الدالتين sum و avg ، فإن وظيفة نافذة العد في SQL واضحة جدًا وتعمل على نفس الخطوط مثل الوظيفتين الأخريين. عندما تمرر وظيفة العد ، تحصل على العدد الإجمالي لكل قيمة داخل العمود الجديد.
إليك كيف يمكنك حساب العدد:
يختارفئة، لون،
عدد (فئة)
OVER (الترتيب حسب الفئة) AS item_count
من عينة سهل.
دالة الإطار Row_Number ()
بخلاف بعض وظائف النافذة الأخرى المذكورة أعلاه ، يعمل row_number () بشكل مختلف قليلاً. تقوم الدالة row_number () بتعيين رقم صف لكل صف ، بناءً على الترتيب حسب الجملة. رقم صف البداية هو 1 ؛ يعيّن row_number قيمة مقابلة لكل صف حتى النهاية.
إليك البنية الأساسية لوظيفة row_number ():
يختارفئة، لون،
رقم الصف()
OVER (الترتيب حسب الفئة) AS item_number
من عينة سهل.
ولكن ماذا يحدث إذا كنت تريد تعيين أرقام صفوف منفصلة لكل عنصر فئة؟ تحدد الصيغة أعلاه رقمًا تسلسليًا متداولًا ، بغض النظر عن العناصر المخزنة داخل الفئة. على سبيل المثال ، يجب أن يكون لفئة الأجهزة ترقيمها الحصري ، متبوعًا بالمجلدات ، وما إلى ذلك.
يمكنك استخدام ال تقسيم وظيفة لأداء هذه المهمة البسيطة والعملية. تقوم الكلمة الأساسية للقسم بتعيين أرقام الصفوف المعينة كأساس لكل عنصر فئة.
يختارفئة، لون،
رقم الصف()
OVER (التقسيم حسب ترتيب الفئة حسب الفئة) AS item_number
من عينة سهل.
الدالتان رتبة () و Dense_Rank ()
ال رتبة() تعمل الوظيفة بشكل مختلف عن رقم الصف() وظيفة. تحتاج إلى تحديد اسم العمود داخل الترتيب حسب الوظيفة ، لاستخدامه كقاعدة لتحديد قيم الرتبة. على سبيل المثال ، في مثال الكود التالي ، يمكنك استخدام عمود اللون داخل الترتيب حسب الوظيفة. سيستخدم الاستعلام بعد ذلك هذا الترتيب لتعيين قيمة مرتبة لكل صف.
يمكنك استخدام بناء جملة التعليمات البرمجية أدناه لتمرير دالة الترتيب في SQL:
يختارفئة، لون،
رتبة()
أكثر (ترتيب حسب اللون) AS item_rank
من عينة سهل.
ألق نظرة على الإخراج لفهم كيفية عمل هذه الوظيفة.
يقوم الترتيب حسب الوظيفة بفرز فئة اللون ، بينما تقوم وظيفة الترتيب بتعيين رتبة لكل لون. ومع ذلك ، فإن جميع قيم الألوان نفسها لها نفس الترتيب ، بينما الألوان المختلفة لها رتب منفصلة. يظهر اللون الأسود ثلاث مرات ضمن مجموعة البيانات ؛ بدلاً من تعيين قيمة مرتبة 1 و 2 و 3 ، تحصل عناصر اللون الأسود على رتبة 1.
ومع ذلك ، فإن اللون البني التالي يحصل على المرتبة 4 بدلاً من المرتبة 2. تتخطى وظيفة الترتيب القيم وتعين القيمة الزمنية التالية للإدخالات المختلفة. إذا كنت تريد تعيين قيمة مرتبة أكثر وضوحًا ، فيمكنك استخدام dense_rank () وظيفة.
لا تتخطى الدالة dense_rank أي قيم مرتبة أثناء الترتيب حسب الوظيفة. على سبيل المثال ، العناصر الثلاثة الأولى من الألوان (أسود) سيكون لها المرتبة 1. ومع ذلك ، فإن اللون التالي (بني) لن يكون له رتبة 4 ، بل رتبة 2 ، وهو الرقم الزمني التالي في قائمة الترقيم. وظيفة dense_rank هي وظيفة نافذة أكثر عملية لأنها تعين قيمة ذات معنى لقائمة العناصر.
إليك كيفية استخدام وظيفة dense_rank في SQL:
يختارفئة، لون،
dense_rank ()
أكثر (ترتيب حسب اللون) AS item_rank
من عينة سهل.
وإليك مثال على الشكل الذي سيبدو عليه ناتج هذه الوظيفة:
وظائف SQL للإنقاذ
تعتبر وظائف نافذة SQL مثالية لتنفيذ العمليات التحليلية المتقدمة. ومع ذلك ، يمكنك استخدام الكثير من أوامر SQL الأخرى لضمان أن مهاراتك الحسابية من الدرجة الأولى. عندما تجمع وتحسب نتائج متعددة دفعة واحدة ، فلا يوجد شيء أفضل من استخدام استعلامات SQL الفرعية.
تعد الاستعلامات الفرعية أداة ممتازة لأداء وظائف متقدمة ، مما يعزز جودة نتائجك. بناءً على حاجة الساعة ، يمكنك تخصيص استفساراتك وجعلها أكثر فاعلية لتناسب متطلباتك.