الفرز حسب أعمدة متعددة
احسم التعادلات بمفاتيح فرز ثانوية
الفرز حسب أعمدة متعددة درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
مشكلة حالات التعادل
عند الفرز حسب عمود واحد، لا يكون للصفوف ذات القيمة نفسها ترتيب محدد فيما بينها. فقد تُعاد ثلاثة منتجات سعر كل منها 20 بأي تسلسل.
لجعل الترتيب متوقعًا تمامًا، أضيفوا مفتاح فرز ثانيًا.
-- Ties on price are ordered arbitrarily
SELECT name, price
FROM products
ORDER BY price;إدراج مفاتيح فرز متعددة
تقبل ORDER BY قائمة أعمدة مفصولة بفواصل. تفرز قاعدة البيانات حسب العمود الأول، ثم تكسر حالات التعادل باستخدام العمود الثاني، وهكذا.
تُفرز المنتجات هنا حسب السعر، وتُحسم حالات التعادل أبجديًا حسب الاسم.
SELECT name, price
FROM products
ORDER BY price, name;أهمية ترتيب المفاتيح
يغيّر تسلسل الأعمدة النتيجة. فـ ORDER BY price, name ليس مماثلًا لـ ORDER BY name, price.
المفتاح الأول هو مفتاح الفرز الأساسي؛ ولا تهم المفاتيح اللاحقة إلا عند تعادل المفاتيح السابقة.
-- Primary sort by category, then by name within each category
SELECT category, name
FROM products
ORDER BY category, name;اتجاه كل عمود
يمكن أن يكون لكل مفتاح فرز اتجاهه الخاص. اخلطوا بين ASC وDESC بحرية.
يجمّع هذا العناصر حسب الفئة أبجديًا، لكنه يعرض داخل كل فئة العناصر الأعلى سعرًا أولًا.
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC;يُطبَّق DESC على كل عمود على حدة
خطأ شائع: الاعتقاد بأن DESC في النهاية يعكس كل شيء. فهو يؤثر فقط في العمود الذي يأتي بعده مباشرةً.
في ORDER BY category, price DESC، يظل category تصاعديًا؛ أما price وحده فمتنازل.
-- category: ASC, price: DESC
SELECT category, price
FROM products
ORDER BY category, price DESC;ثلاثة مفاتيح أو أكثر
يمكنكم ربط أي عدد تحتاجون إليه من مفاتيح الفرز. ولا يُستخدم كل مفتاح إلا عندما تتساوى جميع المفاتيح التي تسبقه.
افرزوا الطلبات حسب التاريخ، ثم حسب العميل، ثم حسب الإجمالي ضمن العميل والتاريخ نفسيهما.
SELECT created_at, customer_id, total
FROM orders
ORDER BY created_at DESC, customer_id, total DESC;فرز ثابت وحتمي
للحصول على نتيجة حتمية تمامًا، أنهوا مفاتيح الفرز بعمود فريد مثل المفتاح الأساسي. عندها لا يمكن أن يتعادل صفّان مطلقًا.
هذا مهم للتقسيم إلى صفحات، وهو ما ستتعلمونه في الدرس التالي.
SELECT id, name, price
FROM products
ORDER BY price DESC, id;خلط التعبيرات والأعمدة
يمكن أن تكون مفاتيح الفرز مزيجًا من الأعمدة العادية والتعبيرات. وكل مفتاح مستقل عن الآخر.
يفرز هذا حسب قيمة المخزون تنازليًا، ثم أبجديًا حسب الاسم لكسر التعادل.
SELECT name, price, stock
FROM products
ORDER BY price * stock DESC, name ASC;الفرز حسب قيمة منطقية لتقديم مجموعة
حيلة مفيدة: افرزوا حسب تعبير منطقي لدفع مجموعة إلى الأعلى أو الأسفل. في PostgreSQL، تأتي false قبل true عند الفرز.
يعرض هذا العناصر المتوفرة في المخزون (stock > 0) أولًا، ثم الأرخص داخل كل مجموعة.
SELECT name, stock, price
FROM products
ORDER BY (stock = 0), price;التحكم في موضع NULL
في PostgreSQL، يُفرز NULL افتراضيًا في النهاية عند الترتيب التصاعدي، وفي البداية عند الترتيب التنازلي. ويمكنكم تجاوز ذلك باستخدام NULLS FIRST أو NULLS LAST مع أي مفتاح.
SELECT name, discount
FROM products
ORDER BY discount DESC NULLS LAST;جمع العناصر معًا
قد يجمع الفرز الواقعي متعدد المفاتيح بين الاتجاهات والتعبيرات ومعالجة NULL. اقرأوه من اليسار إلى اليمين: كل مفتاح يضبط المفتاح الذي يسبقه.
SELECT category, name, price, rating
FROM products
ORDER BY category ASC,
rating DESC NULLS LAST,
price ASC;اختبار سريع
تأمّلوا ORDER BY category, price DESC.
مراجعة
الفرز حسب أعمدة متعددة باختصار:
- أدرجوا مفاتيح الفرز مفصولة بفواصل؛ فالمفاتيح السابقة لها الأولوية
- لكل مفتاح
ASCأوDESCخاص به - أنهوا الفرز بعمود فريد للحصول على ترتيب حتمي
- تحكموا في القيم المفقودة باستخدام
NULLS FIRSTأوNULLS LAST
في الدرس التالي، ستحدّدون عدد الصفوف المعادة باستخدام LIMIT وOFFSET.
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC, id;الأسئلة الشائعة
هل درس «الفرز حسب أعمدة متعددة» مجاني؟
نعم — نص درس «الفرز حسب أعمدة متعددة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «الفرز حسب أعمدة متعددة»؟
احسم التعادلات بمفاتيح فرز ثانوية تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الفرز حسب أعمدة متعددة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الفرز باستخدام ORDER BY
- الفرز حسب أعمدة متعددة
- LIMIT وOFFSET
- العثور على سجلات Top-N