يستكشف هذا البرنامج التعليمي كيفية العمل مع وظائف PostgreSQL. نستكشف أيضًا بناء جملة الدالة والمعلمات ونلقي نظرة على بعض الأمثلة العملية.
وظيفة رتبة PostgreSQL ()
يوضح ما يلي بناء جملة الدالة Rank () في PostgreSQL:
RANK () OVER (PARTITION BY partition_expression ORDER BY sort_expression [ASC | DESC])
نبدأ باستدعاء وظيفة الرتبة (). ثم نستخدم الكلمة الأساسية OVER للإشارة إلى أننا نرغب في إجراء عملية وظيفة نافذة.
التالي هو PARTITION BY partition_expression. يقسم هذا البند الصفوف إلى أقسام مختلفة بناءً على تعبير معين. يتم الترتيب بشكل مستقل في كل قسم حيث تبدأ قيمة التصنيف الصحيح عند 1 لكل قسم جديد.
أخيرًا ، لدينا عبارة ORDER BY التي تحدد العمود أو التعبير الذي يحدد ترتيب الصف.
مثال دالة على رتبة PostgreSQL
يوضح الاستعلام التالي مثالًا أساسيًا لاستخدام وظيفة رتبة () في PostgreSQL:
حدد القيمة ، RANK () أكثر من (ترتيب حسب القيمة) كرتبةمن (
القيم (10) ، (20) ، (5) ، (15) ، (10)
) كبيانات (قيمة) ؛
في هذا المثال ، نقوم بترتيب القيم بناءً على ترتيبها التصاعدي. يتم تعيين تكراري القيمة بنفس الترتيب حيث أنهما متشابهان ويظهران في نفس الموضع داخل الترتيب.
الجدول الناتج هو كما يلي:
حدد القيمة ، RANK () OVER (PARTITION BY value٪ 2 ORDER BY value) AS رتبةمن (
القيم (10) ، (20) ، (5) ، (15) ، (10)
) كبيانات (قيمة) ؛
مثال دالة على رتبة PostgreSQL مع التقسيم حسب الشرط
خذ بعين الاعتبار المثال التالي:
حدد القيمة ، RANK () OVER (PARTITION BY value٪ 2 ORDER BY value) AS رتبةمن (
القيم (10) ، (20) ، (5) ، (15) ، (10)
) كبيانات (قيمة) ؛
في هذا المثال ، أضفنا جملة PARTITION BY مع تعبير يتحقق مما إذا كانت القيمة عددًا زوجيًا أم فرديًا. يجب أن يجمع هذا القيم بشكل فعال في قسمين: أحدهما للأرقام الزوجية (حيث يكون الباقي 0) والآخر للأرقام الفردية (حيث يكون الباقي 1).
المجموعة الناتجة هي كما يلي:
مثال دالة على رتبة PostgreSQL من خلال الجمع بين ميزات SQL المتعددة
يمكنك أيضًا إنشاء استعلامات أكثر تعقيدًا باستخدام وظيفة Rank (). على سبيل المثال ، خذ قاعدة بيانات Pagila. لنفترض أننا نرغب في جلب أفضل خمسة عملاء بناءً على إجمالي مدفوعات الإيجار وتعيين الرتب لهم.
يمكننا استخدام الدالة Rank () كما هو موضح في الاستعلام التالي:
حدد customer_id ، First_name ، last_name ، total_payments ،RANK () أكثر من (ORDER BY total_payments DESC) AS رتبة
من (
حدد c.customer_id، c.first_name، c.last_name، SUM (p.amount) AS total_payments
من العميل ج
الانضمام إلى الدفع p ON c.customer_id = p.customer_id
تجميع حسب c.customer_id ، c.first_name ، c.last_name
) AS customer_payments
ترتيب حسب الترتيب
الحد 10 ؛
في هذا المثال ، نختار customer_id ، و first_name ، و last_name ، و total_payment ، والترتيب المخصص (). بعد ذلك ، نستخدم وظيفة الترتيب () لتعيين رتبة لكل عميل بناءً على إجمالي الدفعة التي تم فرزها بترتيب تنازلي.
يسمح لنا الاستعلام الفرعي الداخلي بحساب إجمالي المدفوعات لكل عميل من خلال الانضمام إلى العميل وجداول الدفع. نقوم بعد ذلك بتجميع النتيجة بناءً على أعمدة customer_id و first_name و last_name لجلب مجموع المدفوعات لكل عميل.
أخيرًا ، في الاستعلام الخارجي ، نطبق وظيفة الترتيب () على مجموعة النتائج ونرتبها حسب إجمالي المدفوعات بترتيب تصاعدي. نقوم أيضًا بتضمين شرط التحديد لجلب الصفوف العشرة الأولى فقط.
كما ترى ، يمكنك إنشاء المزيد من البيانات الثاقبة من خلال الجمع بين ميزات SQL المتعددة مثل الفرز والتصفية والتجميعات والصلات والمزيد.
خاتمة
اكتشفنا كيف يمكننا العمل مع وظيفة Rank () في PostgreSQL لجلب رتبة صف معين من مجموعة نتائج بناءً على الشروط المحددة. قمنا أيضًا بتغطية كيفية دمج وظيفة Rank () مع أدوات SQL الأخرى لإنشاء استعلامات أكثر تعقيدًا.