القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة. اقرأ أكثر.

ازداد تعدد استخدامات SQL كلغة استعلام في نظام إدارة قواعد البيانات (DBMS) على مر السنين. فائدته الواسعة وتعدد استخداماته تجعله المفضل في جميع الأوقات لكل محلل بيانات.

هناك عدد غير قليل من وظائف المستوى المتقدم إلى جانب وظائف SQL العادية. تُعرف هذه الوظائف عمومًا بوظائف النافذة. إذا كنت تتعامل مع بيانات معقدة وتريد إجراء حسابات متقدمة ، فيمكنك استخدامها لتحقيق أقصى استفادة من بياناتك.

أهمية وظائف النوافذ

تتوفر العديد من وظائف النوافذ في SQL ، وسيساعدك كل منها في إجراء سلسلة من العمليات الحسابية. من إنشاء الأقسام إلى صفوف الترتيب أو تعيين أرقام الصفوف ، تقوم وظائف النافذة هذه بالقليل من كل شيء.

تكون وظائف النافذة مفيدة عندما تقوم بتطبيق وظائف مجمعة على مجموعة بيانات معينة أو مجموعة من الصفوف. تتجاوز هذه الوظائف وظائف التجميع التي توفرها GROUP BY. ومع ذلك ، فإن الاختلاف الرئيسي هو أنه ، على عكس وظيفة التجميع ، لا يتم دمج بياناتك في صف واحد.

لا يمكنك استخدام وظائف النافذة داخل ملف أين, من، و مجموعة من صياغات.

instagram viewer

بناء جملة وظيفة النافذة

عندما تشير إلى أي وظيفة نافذة ، فأنت بحاجة إلى اتباع بنية بناء الجملة الافتراضية ، بحيث تعمل بشكل صحيح. إذا قمت ببناء الأمر بشكل غير صحيح ، فستتلقى خطأ وسيفشل تشغيل الكود الخاص بك.

إليك الصيغة الافتراضية:

يختار اسم العمود 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 الفرعية.

تعد الاستعلامات الفرعية أداة ممتازة لأداء وظائف متقدمة ، مما يعزز جودة نتائجك. بناءً على حاجة الساعة ، يمكنك تخصيص استفساراتك وجعلها أكثر فاعلية لتناسب متطلباتك.