0Pricing
SQL Interview Prep · درس

NTILE لتقسيم الصفوف إلى مجموعات

تقسيم الصفوف إلى أرباع وشرائح مئينية

NTILE لتقسيم الصفوف إلى مجموعات درس مجاني في SQL Interview Prep على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.

متى تحتاج إلى شرائح متساوية الحجم

قد يسأل القائمون بالمقابلات: «قسّم العملاء إلى أربع مجموعات متساوية حسب الإنفاق» أو «في أي عُشر يقع كل صف؟» والأداة المناسبة هي NTILE.

توزّع NTILE(n) الصفوف المرتبة على n شرائح بأكبر قدر ممكن من التساوي، وتضع رقم الشريحة لكل صف، من 1 إلى n. يشرح هذا الدرس طريقة التقسيم، وكيفية التعامل مع الأعداد غير المتساوية، والفرق بينه وبين الترتيب.

الصيغة الأساسية لـ NTILE

يؤدي تطبيق NTILE(4) على صفوف مرتبة حسب قيمة إلى إنتاج الأرباع. وكجميع دوال النوافذ، يحتاج إلى عبارة OVER؛ إذ يحدد ORDER BY الموجود بداخلها الصفوف التي ستقع في الشرائح ذات القيم المنخفضة مقابل الشرائح ذات القيم المرتفعة.

يضع الترتيب التصاعدي أصغر القيم في الشريحة 1، بينما يعكس الترتيب التنازلي ذلك.

SELECT
  customer_id,
  total_spend,
  NTILE(4) OVER (ORDER BY total_spend) AS spend_quartile
FROM customers;

كيف يوزّع NTILE الصفوف

مع وجود 12 صفًا واستخدام NTILE(4)، تحصل كل شريحة على 12 / 4 = 3 صفوف بالضبط. الشريحة 1 = أقل 3 قيم، والشريحة 4 = أعلى 3 قيم.

الفكرة الأساسية هي أن NTILE يقسم الصفوف حسب عدد الصفوف، لا حسب نطاقات القيم. ويمكن لشريحتين أن تغطيا نطاقين مختلفين جدًا من القيم ما دام عدد الصفوف فيهما متساويًا.

القسمة غير المتساوية

ماذا يحدث إذا لم تنقسم الصفوف بالتساوي؟ مع وجود 10 صفوف واستخدام NTILE(4)، تكون العملية 10 / 4 = 2 والباقي 2. يمنح NTILE الشرائح الأولى الصفوف الإضافية.

  • الشريحة 1: 3 صفوف
  • الشريحة 2: 3 صفوف
  • الشريحة 3: صفان
  • الشريحة 4: صفان

لذلك يختلف حجم الشرائح بصف واحد كحد أقصى، وتأتي الشرائح الأكبر أولًا. وهذه القاعدة الدقيقة من التفاصيل المفضلة في المقابلات.

يتجاهل NTILE حالات التعادل في القيم

تنبيه مهم: لا يُبقي NTILE القيم المتساوية في الشريحة نفسها. فهو يملأ الشرائح حسب الموضع، ولذلك يمكن أن يقع صفان لهما total_spend متطابق في شريحتين مختلفتين لمجرد اختلاف ترتيب الصفوف.

إذا كان النشاط التجاري يتطلب أن تشترك القيم المتساوية في المستوى نفسه، فإن NTILE ليس الأداة المناسبة؛ بل تحتاج إلى أسلوب قائم على القيم. يضع القائمون بالمقابلات هذا الفخ عمدًا.

الأعشار والمئينات

عدد الشرائح هو ببساطة الرقم الذي تمرره. يمنحك NTILE(10) الأعشار، بينما يمنحك NTILE(100) شرائح مئينية. وهذه هي الطريقة التي يقسم بها المحللون المستخدمين إلى مستويات أداء أو شرائح مخاطر.

تكون النتيجة رقم الشريحة، ولذلك فإن القيمة الموجودة في الشريحة 9 من NTILE(10) تقع في ثاني أعلى عُشر.

SELECT
  user_id,
  score,
  NTILE(10) OVER (ORDER BY score DESC) AS decile
FROM leaderboard;

الشرائح المقسّمة حسب المجموعة

أضف PARTITION BY لتقسيم الصفوف إلى شرائح داخل كل مجموعة على نحو مستقل، مثل أرباع الإنفاق لكل منطقة. وتبدأ كل منطقة من جديد عند الشريحة 1.

يجيب ذلك عن أسئلة مثل «من هم العملاء الموجودون في الربع الأعلى داخل كل منطقة؟»، حيث تملك حتى المنطقة ذات الإنفاق الإجمالي المنخفض شريحتها 4 الخاصة.

SELECT
  region,
  customer_id,
  total_spend,
  NTILE(4) OVER (
    PARTITION BY region
    ORDER BY total_spend DESC
  ) AS regional_quartile
FROM customers;

التصفية حسب مستوى محدد

لا يمكنك وضع NTILE(...) مباشرةً في عبارة WHERE؛ إذ تُحسب دوال النوافذ بعد WHERE. غلّف الاستعلام داخل CTE أو استعلام فرعي، ثم صفِّ النتائج باستخدام عمود الشريحة.

هذا النمط، «أعطني أعلى ربع من المنفقين»، هو الطريقة الأكثر شيوعًا لظهور NTILE في إجابة واقعية.

WITH q AS (
  SELECT customer_id, total_spend,
         NTILE(4) OVER (ORDER BY total_spend DESC) AS quartile
  FROM customers
)
SELECT customer_id, total_spend
FROM q
WHERE quartile = 1;

NTILE مقابل المئينات القائمة على القيمة

يقسم NTILE الصفوف إلى شرائح ذات أعداد متساوية. أما إذا كنت تحتاج إلى مئين إحصائي حقيقي، أي القيمة الموجودة عند المئين 90، فاستخدم PERCENTILE_CONT أو PERCENTILE_DISC.

  • NTILE(100): يحدد شريحة المئين التي يقع فيها الصف حسب موضعه في الترتيب.
  • PERCENTILE_CONT(0.9): يعيد القيمة الفعلية عند المئين 90.

إن معرفة الفرق بينهما تميز الإجابة الواثقة من التخمين.

متى يكون ORDER BY مهمًا

يتطلب NTILE وجود ORDER BY داخل OVER؛ فالشرائح لا معنى لها من دون ترتيب محدد. ويحدد اتجاه الترتيب أي طرف سيكون الشريحة 1.

إذا جعلت حالات التعادل التعيين غير واضح، وكان تحديد الشريحة الدقيقة لصف يقع على الحد مهمًا، فأضف عمودًا فاصلًا إلى الترتيب للحصول على نتائج حتمية قابلة لإعادة الإنتاج.

تسمية الشرائح بأسماء

نادرًا ما تكون أرقام الشرائح الخام (1، 2، 3، 4) هي النتيجة النهائية المطلوبة. فعادةً ما يحوّل المحللون هذه الأرقام إلى تسميات تجارية مثل منخفض، ومتوسط، ومرتفع، وقمة باستخدام تعبير CASE على نتيجة NTILE.

احسب NTILE في CTE، ثم حوّل الرقم في الاستعلام الخارجي. يحافظ ذلك على وضوح منطق النافذة ويجعل المخرجات جاهزة للعرض.

WITH q AS (
  SELECT customer_id, total_spend,
         NTILE(4) OVER (ORDER BY total_spend) AS bucket
  FROM customers
)
SELECT customer_id, total_spend,
  CASE bucket
    WHEN 1 THEN 'Low'
    WHEN 2 THEN 'Medium'
    WHEN 3 THEN 'High'
    WHEN 4 THEN 'Top'
  END AS spend_tier
FROM q;

تحقق سريع

اختبر قاعدة التوزيع غير المتساوي.

مراجعة

يوزّع NTILE الصفوف المرتبة على شرائح متساوية العدد:

  • تضع NTILE(n) تسمية للصفوف من 1 إلى n؛ ويمثل NTILE(4) الأرباع، بينما يمثل NTILE(10) الأعشار.
  • يقسم الصفوف حسب عددها، لا حسب نطاق القيم، ويمنح الصفوف الإضافية للشرائح الأولى.
  • لا يُبقي القيم المتساوية معًا، ولا يمكن وضعه مباشرةً في WHERE.
  • للحصول على قيمة مئينية حقيقية، استخدم PERCENTILE_CONT.

بعد ذلك: استخراج القيم الحدية باستخدام FIRST_VALUE وLAST_VALUE وحواف إطار النافذة.

الأسئلة الشائعة

هل درس «NTILE لتقسيم الصفوف إلى مجموعات» مجاني؟

نعم — نص درس «NTILE لتقسيم الصفوف إلى مجموعات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.

ماذا ستتعلم في «NTILE لتقسيم الصفوف إلى مجموعات»؟

تقسيم الصفوف إلى أرباع وشرائح مئينية تتمرن على SQL Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Interview Prep؟

لا تُشترط خبرة سابقة. SQL Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «NTILE لتقسيم الصفوف إلى مجموعات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Interview Prep هذا؟

نعم. كل درس في SQL Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. LAG وLEAD للصفوف المتجاورة
  2. التغير من فترة إلى أخرى
  3. NTILE لتقسيم الصفوف إلى مجموعات
  4. FIRST_VALUE وLAST_VALUE وحدود الإطار
← العودة إلى SQL Interview Prep