"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تحديد الصفوف العليا بكفاءة لكل فئة في MySQL دون وظائف تحليلية؟

كيفية تحديد الصفوف العليا بكفاءة لكل فئة في MySQL دون وظائف تحليلية؟

تم النشر بتاريخ 2024-11-08
تصفح:725

How to Efficiently Select Top Rows per Category in MySQL Without Analytic Functions?

تحديد أفضل الصفوف لكل فئة في MySQL

لاسترداد عدد محدود من الصفوف من كل فئة في جدول، يمكنك الاستفادة من الوظائف التحليلية . ومع ذلك، لا تقدم MySQL هذه الوظائف بشكل مباشر. ومع ذلك، من الممكن محاكاتها باستخدام المتغيرات.

محاكاة الوظائف التحليلية

يحاكي استعلام MySQL التالي وظائف الوظائف التحليلية لتحديد أعلى 3 صفوف لكل فئة :

SELECT x.*
FROM (
    SELECT t.*,
    CASE 
        WHEN @category != t.category THEN @rownum := 1 
        ELSE @rownum := @rownum   1 
    END AS rank,
    @category := t.category AS var_category
    FROM TBL_ARTIKUJT t
    JOIN (SELECT @rownum := NULL, @category := '') r
    ORDER BY t.category
) x
WHERE x.rank 

شرح

يحدد الاستعلام الفرعي جميع الصفوف من جدول TBL_ARTIKUJT ويقوم بتهيئة متغيرين للجلسة، @rownum و@category، لتتبع الترتيب والفئة الحالية.
  • يشير الترتيب المخصص لكل صف إلى موقعه ضمن فئته. عند مواجهة فئة جديدة، تتم إعادة تعيين الترتيب إلى 1.
  • يتم استخدام var_category لتخزين الفئة لكل صف.
  • تقوم عبارة SELECT الخارجية بتصفية الاستعلام الفرعي، مع تحديد الصفوف ذات التصنيف فقط أقل من أو يساوي 3.
  • تسمح لك هذه الطريقة بتنفيذ الوظيفة المطلوبة دون الاعتماد على الوظائف التحليلية، التي لا تدعمها MySQL.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3