ฉันจะหาค่ามัธยฐานของคอลัมน์ใน MySQL ได้อย่างไร


10

ฉันสามารถจินตนาการการทำเช่นนี้กับแบบสอบถามฐานข้อมูลที่สอง ครั้งแรกที่ค้นหาจำนวนแถวในฐานข้อมูลและที่สองเลือกที่มีORDER BYในคอลัมน์ที่ฉันสนใจและLIMIT X, 1ที่ X คือครึ่งหนึ่งของจำนวนแถว

มีวิธีง่ายๆในการทำเช่นนี้กับแบบสอบถามเดียวเท่านั้นหรือไม่

ตอนนี้ฉันกำลังใช้ค่าเฉลี่ยในการคำนวณของฉัน แต่ฉันคิดว่าค่าเฉลี่ยจะดีกว่า ไม่มีขอบเขตบนค่าและพวกเขาถูกผูกไว้จากด้านล่างโดย 0


แก้ไข: ใช่ฉันหมายถึงการพูดว่า 'ค่ามัธยฐาน' แต่มีข้อผิดพลาดของสมองและค้นหา 'ค่าเฉลี่ย' ตอนนี้ฉันพบคำตอบที่stackoverflow แล้ว


หลังจากอ่านmetaนิดหน่อยดูเหมือนว่ามีการแบ่งคำถามเกี่ยวกับสภาพอากาศนี้ควรอยู่ที่นี่หรือที่ SO ฉันรู้ว่านี่อาจไม่ใช่แบบสอบถามระดับนินจาแต่มันทำให้ฉันนิ่งงันและไม่มี DBA ที่ บริษัท ที่ฉันทำงานด้วย (ทั้งหมด 6 คน)
JIStone

คำตอบ:


6

มีค่อนข้างบิตของการอภิปรายคือที่นี่ในการคำนวณค่าเฉลี่ยจากตาราง MySQL เพียงค้นหาหน้าสำหรับ 'มัธยฐาน'

นอกจากนี้ฉันยังสะเพร่าเหมือนไม่มีฟังก์ชั่นในตัวที่จะทำสิ่งนี้ ค่ามัธยฐานมักจะเป็นคำอธิบายของแนวโน้มกลางมากกว่าค่าเฉลี่ย การเข้าถึง / VBA มีรูเดียวกันในรายการฟังก์ชัน


ฉันเห็นด้วย. เมื่อทำงานกับข้อความค้นหาขนาดใหญ่บรรทัดพิเศษจะทำให้ยุ่งยากและยากขึ้นในการดีบัก / บำรุงรักษา
JIStone

2

ฉันไม่ได้เห็นวิธีแก้ปัญหาที่ใดก็ได้ที่จัดการเพื่อให้ค่ามัธยฐานในแบบสอบถามเดียว ฉันไม่สนใจตาราง temp แต่ถ้าพวกมันไม่จำเป็นก็เยี่ยมเลย! นี่คือสิ่งที่ฉันมาด้วย:

SELECT AVG(profit) median, nofitems FROM(
  SELECT x.profit, SUM(SIGN(1.0-SIGN(y.profit-x.profit))) diff, count(*) nofitems, floor(count(*)+1/2)
  FROM brand_prof x, brand_prof y
  GROUP BY x.profit
  HAVING SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = floor((COUNT(*)+1)/2)
      OR SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = ceiling((COUNT(*)+1)/2)
) x;

ฉันทดสอบสิ่งนี้เพื่อตั้งฉากและได้รับคำตอบที่ถูกต้อง brand_prof เป็นเพียงสองคอลัมน์: brand_name และกำไรเป็นค่าทศนิยม หากนี่เป็นค่าจำนวนเต็มคุณอาจต้องโยน "ceiling ((CAST COUNT (*) AS DECIMAL))" มากกว่าที่ฉันทดสอบความคิดเจ๋งที่จะใช้ผลิตภัณฑ์คาร์ทีเซียนและเชื่อมโยงกับผลรวมของสัญญาณคือ ไม่ใช่ของฉันฉันลืมผู้เขียนไปแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.