اذهب إلى المحتوى

السؤال

نشر

أريد حساب الوسيط أو القيمة الوسطى للعناصر الموجودة بجدول على 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.

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

Recommended Posts

  • 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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...