• 0

كيف أستخرج القيمة الوسطى لمجموعة قيم على Mysql؟

أريد حساب الوسيط أو القيمة الوسطى للعناصر الموجودة بجدول على Mysql يتوفر على مجموعة قيم عددية، وهذا هو الجدول:

id | val
--------
 1    4
 2    7
 3    2
 4    2
 5    9
 6    8
 7    3

لكن عند استعمال دالة avg حصلت على القيمة 5، مع العلم أن القيمة الوُسطى لحقل val هي 4؟

القيم : 2 2 3 4 7 8 9، تكون القيمة الوُسطى إذن هي 4.

كيف أتمكن من استخراج القيمة الوسطى؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

للحصول على القيمة الوُسطى وليس المعدّل -avg- لمجموع الأعداد، نحتاج أولا لترتيب الأعداد تصاعديا، ثم حساب عدد الأعداد وإضافة 1 للقيمة المحصّل عليها، وفي الأخير قسمة العدد على 2:

SELECT avg(t1.val) as median_val FROM (
SELECT @rownum:=@rownum+1 as `row_number`, d.val
  FROM data d,  (SELECT @rownum:=0) r
  WHERE 1
   
  ORDER BY d.val
) as t1, 
(
  SELECT count(*) as total_rows
  FROM data d
  WHERE 1
   ) as t2
WHERE 1
AND t1.row_number in ( floor((total_rows+1)/2), floor((total_rows+2)/2) );

والسطرين التاليين يوضّحان بشكل عملي، تفسير الطريقة:

SELECT floor((3+1)/2),floor((3+2)/2);#total_rows is 3, so avg row_numbers 2 and 2
SELECT floor((4+1)/2),floor((4+2)/2);#total_rows is 4, so avg row_numbers 2 and 3

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن