البرمجة

تنفيذ عملية إقران اللاعبين في قاعدة بيانات SQL باستخدام نوافذ الاستعلام

في سياق قاعدة البيانات الخاصة بك، يبدو أنك ترغب في تنفيذ عملية إقران لاعبين باستخدام لغة الاستعلام الهيكلية SQL. للقيام بذلك، يمكنك استخدام عبارة SQL المعقدة بعض الشيء ولكنها فعالة.

للبداية، يمكنك استخدام نافذة الاستعلام (Window Function) لترتيب الصفوف بناءً على عدد المباريات التي فاز بها اللاعبون. بعد ذلك، يمكنك استخدام الوظائف المدمجة في SQL مثل LEAD() للوصول إلى الصف التالي في الترتيب، وبالتالي إنشاء أزواج لاعبين.

إليك استعلامًا يمكن استخدامه لتحقيق هذا الغرض:

sql
WITH RankedPlayers AS ( SELECT Id, Name, Wins, ROW_NUMBER() OVER (ORDER BY Wins DESC) AS Rank FROM Players ) SELECT p1.Id AS Id1, p1.Name AS Name1, p2.Id AS Id2, p2.Name AS Name2 FROM RankedPlayers p1 JOIN RankedPlayers p2 ON p1.Rank + 1 = p2.Rank WHERE p1.Rank % 2 = 1;

في هذا الاستعلام، يتم استخدام CTE (Common Table Expression) لترتيب اللاعبين بناءً على عدد المباريات التي فازوا بها. ثم يتم دمج الجدول مع نفسه باستخدام JOIN للوصول إلى الصفوف المتجاورة في الترتيب. الشرط في الجملة WHERE يتحقق من أن الصفوف المختارة تمثل أزواجًا من اللاعبين.

المزيد من المعلومات

بالتأكيد، سنقوم بتوسيع الشرح لفهم أفضل لعملية الاستعلام.

أولاً وقبل الكل، يتم استخدام العبارة WITH لإنشاء CTE (Common Table Expression) بالاسم “RankedPlayers”. في هذا السياق، يقوم CTE بتحديد الأعمدة التي تحتاج إلى عملية الترتيب، وهي Id، Name، و Wins، بالإضافة إلى إضافة عمود إضافي يسمى “Rank”. عملية الترتيب تتم باستخدام النافذة الرتبة ROW_NUMBER() وتتم ترتيب الصفوف بناءً على عدد المباريات التي فاز بها اللاعبين (Wins) بترتيب تنازلي (DESC).

بمجرد إنشاء CTE، يتم استخدامه في استعلام آخر يستخدم الجدول المرتب لإنشاء الأزواج. يتم ذلك عبر الجملة SELECT الرئيسية حيث يتم الانضمام (JOIN) بين الجدول المرتب (p1) والجدول المرتب نفسه (p2) باستخدام شرط الرتبة. في هذه الحالة، يتم الانضمام بين صفوف اللاعبين الذين يحتلون الرتبة المتجاورة.

الشرط WHERE يتحقق من أن نصف الصفوف المختارة يتمثل في اللاعبين المزدوجين، ويتم ذلك باستخدام % 2 = 1 حيث يُعتبر ذلك شرطًا للصفوف ذات الرتبة الفردية. بالتالي، يتم اختيار الأزواج المكونة من لاعبين متتاليين في الترتيب.

يُعيد هذا الاستعلام جدولًا جديدًا يحتوي على أربعة أعمدة (Id1، Name1، Id2، Name2) يمثل كل صف زوجين من اللاعبين.

زر الذهاب إلى الأعلى