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

متقدمقراءة دقيقةآخر تحديث 2 أكتوبر 2026

SQL قواعد البيانات

الإجابة

عند الجمع بين 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 من الأساسيات للاحتراف.

اختبر فهمك

ما القيم التي يعرضها الاستعلام التالي بالترتيب؟

CREATE TABLE books_distinct_page_quiz (price INT);
INSERT INTO books_distinct_page_quiz VALUES (5), (5), (10), (10), (15), (20), (25);
SELECT DISTINCT price FROM books_distinct_page_quiz ORDER BY price LIMIT 2 OFFSET 2;