0Pricing
SQL Academy · درس

العثور على سجلات Top-N

احصل على أعلى القيم وأدناها

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

ما استعلام Top-N

يجيب استعلام Top-N عن أسئلة مثل: «ما المنتجات الثلاثة الأعلى سعرًا؟» أو «ما الطلبات العشرة الأحدث؟» أو «ما أدنى 5 نتائج؟».

إنه مجرد ترتيب مع حدّ أقصى، لكنه شائع جدًا لدرجة أنه يستحق اسمًا خاصًا.

-- Top 3 most expensive products
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 3;

سجلات Bottom-N

للحصول على أصغر القيم، اعكس الاتجاه. رتّب باستخدام ASC وخذ أول N صفوف لتحصل على الصفوف الأرخص أو الأقدم أو الأقل قيمة.

-- 5 cheapest products
SELECT name, price
FROM products
ORDER BY price ASC
LIMIT 5;

إضافة كاسر للتعادل

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

SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;

Top-N بعد التصفية

يعمل Top-N على مجموعة الصفوف التي تمت تصفيتها. ضع عبارة WHERE أولًا لتقييد المرشحين، ثم رتّب وحدّد العدد.

يعثر هذا على المنتجات الثلاثة الأعلى سعرًا في الفئة 'Books'.

SELECT name, price
FROM products
WHERE category = 'Books'
ORDER BY price DESC
LIMIT 3;

Top-N بعد التجميع

يمكنك أيضًا ترتيب القيم المحسوبة. جمّع البيانات، ثم أجرِ التجميع، وبعد ذلك رتّب قيمة التجميع وحدّد العدد.

يعيد هذا العملاء الخمسة الذين أنفقوا أكبر مبلغ إجمالًا.

SELECT customer_id, SUM(total) AS spent
FROM orders
GROUP BY customer_id
ORDER BY spent DESC
LIMIT 5;

أسلوب دوال الترتيب

تُسند دوال النوافذ مثل ROW_NUMBER() ترتيبًا إلى كل صف. غلّف الاستعلام واحتفظ بالصفوف التي يكون ترتيبها صغيرًا. ويتوسع هذا الأسلوب ليشمل «Top-N لكل مجموعة».

SELECT name, price
FROM (
  SELECT name, price,
         ROW_NUMBER() OVER (ORDER BY price DESC) AS rn
  FROM products
) ranked
WHERE rn <= 3;

‏RANK مقابل ROW_NUMBER عند التعادل

تمنح ROW_NUMBER() أرقامًا مختلفة دائمًا، ولذلك تعيد N صفوف بالضبط حتى عند وجود تعادل. أما RANK() فتعطي الصفوف المتعادلة الرقم نفسه، ولذلك قد يعيد «أفضل 3» أكثر من 3 صفوف إذا حدث تعادل في المركز الثالث.

SELECT name, price,
       RANK() OVER (ORDER BY price DESC) AS rnk
FROM products;

‏Top-N لكل مجموعة

للحصول على المنتج الأفضل في كل فئة، قسّم الترتيب حسب الفئة. تعيد PARTITION BY بدء الترقيم لكل مجموعة.

SELECT category, name, price
FROM (
  SELECT category, name, price,
         ROW_NUMBER() OVER (
           PARTITION BY category
           ORDER BY price DESC
         ) AS rn
  FROM products
) t
WHERE rn = 1;

‏DISTINCT ON لصف واحد لكل مجموعة

يوفّر DISTINCT ON في PostgreSQL طريقة مختصرة لاختيار الصف الأعلى ترتيبًا لكل مجموعة. اذكر عمود التجميع، ثم رتّب بحيث يأتي الصف المطلوب أولًا ضمن كل مجموعة.

SELECT DISTINCT ON (category)
       category, name, price
FROM products
ORDER BY category, price DESC;

تضمين الصفوف المتعادلة باستخدام WITH TIES

إذا أردت أفضل 3 صفوف، بالإضافة إلى أي صفوف تتعادل مع الصف الثالث، فاستخدم FETCH ... WITH TIES القياسي. إذ يعيد 3 صفوف، بالإضافة إلى الصفوف التي تتعادل مع الصف الأخير.

SELECT name, price
FROM products
ORDER BY price DESC
FETCH FIRST 3 ROWS WITH TIES;

قيمة عليا واحدة

للحصول على الصف الأعلى أو الأدنى قيمة فقط، يُعدّ النمط ORDER BY ... LIMIT 1 الأبسط، وهو أوضح وغالبًا أسرع من استعلام فرعي يستخدم MAX().

-- The single most recent order
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 1;

تحقق سريع

تريد أعلى 3 أسعار، لكنك تريد تضمين جميع الصفوف التي تتعادل في المركز الثالث.

مراجعة

يمكنك الآن العثور على سجلات Top-N بكل الطرق المهمة:

  • ORDER BY ... LIMIT n للقوائم البسيطة لأعلى القيم أو أدناها
  • أضف كاسر تعادل فريدًا للحصول على نتائج مستقرة
  • استخدم ROW_NUMBER() أو DISTINCT ON للحصول على Top-N لكل مجموعة
  • استخدم FETCH ... WITH TIES للإبقاء على الصفوف المتعادلة

بهذا يكتمل موضوع الترتيب وتحديد العدد وTop-N. ويمكنك الآن تنظيم أي مجموعة نتائج تنظيمًا فعليًا.

SELECT name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;

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

هل درس «العثور على سجلات Top-N» مجاني؟

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

ماذا ستتعلم في «العثور على سجلات Top-N»؟

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

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

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

كم من الوقت يستغرق درس «العثور على سجلات Top-N»؟

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

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

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

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

  1. الفرز باستخدام ORDER BY
  2. الفرز حسب أعمدة متعددة
  3. LIMIT وOFFSET
  4. العثور على سجلات Top-N
← العودة إلى SQL Academy