شبكة تعلم مع ناو

هل تطبق LIMIT وOFFSET على القيم المميزة مع DISTINCT؟

عند الجمع بين DISTINCT وORDER BY وLIMIT مع OFFSET، تصف النتيجة المطلوبة قائمة القيم المميزة بعد ترتيبها، ثم الجزء المختار من هذه القائمة. لا ينبغي حساب الإزاحة على الصفوف الأصلية المكررة ثم إزالة تكرار الجزء المأخوذ. هذا الفرق قد يغير القيم وعدد الصفوف التي نتوقع ظهورها في الصفحة.

لتتبع الاستعلام يدويًا، استخرج القيم المختلفة أولًا، ثم رتبها بحسب ORDER BY، ثم تجاوز العدد المحدد في OFFSET، وأخيرًا خذ عدد الصفوف الذي تسمح به LIMIT. هذا وصف منطقي لمعنى النتيجة، وليس شرطًا لطريقة التنفيذ الداخلية. وهو مفيد عند عرض صفحات من قائمة تصنيفات أو أسعار مميزة، لأن كل قيمة متكررة في البيانات تشغل مكانًا واحدًا فقط في القائمة النهائية.

مثال

CREATE TABLE books_distinct_page_demo (price INT);
INSERT INTO books_distinct_page_demo VALUES (10), (10), (20), (20), (30), (40);
SELECT DISTINCT price FROM books_distinct_page_demo ORDER BY price LIMIT 2 OFFSET 1;

القائمة المميزة هي 10 و20 و30 و40، ولذلك يعرض المثال 20 و30.

باختصار: احسب صفحة DISTINCT من القائمة المميزة المرتبة، لا من الصفوف الأصلية المكررة.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.