Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में MAX, MIN, और AVG फ़ंक्शन के साथ MEDIAN का उपयोग करना

आप MySQL में GROUP BY के साथ माध्यिका की गणना कर सकते हैं, भले ही कोई माध्यिका फ़ंक्शन अंतर्निहित न हो।

तालिका पर विचार करें:

Acrington   200.00
Acrington   200.00
Acrington   300.00
Acrington   400.00
Bulingdon   200.00
Bulingdon   300.00
Bulingdon   400.00
Bulingdon   500.00
Cardington  100.00
Cardington  149.00
Cardington  151.00
Cardington  300.00
Cardington  300.00

प्रत्येक पंक्ति के लिए आप समान वस्तुओं की संख्या गिन सकते हैं जो कम हैं। आप यह भी गिन सकते हैं कि कितने मान इससे कम या बराबर हैं:

name        v       <   <=
Acrington   200.00  0   2
Acrington   200.00  0   2
Acrington   300.00  2   3
Acrington   400.00  3   4
Bulingdon   200.00  0   1
Bulingdon   300.00  1   2
Bulingdon   400.00  2   3
Bulingdon   500.00  3   4
Cardington  100.00  0   1
Cardington  149.00  1   2
Cardington  151.00  2   3
Cardington  300.00  3   5
Cardington  300.00  3   5

क्वेरी के साथ

SELECT name,v, (SELECT COUNT(1) FROM sale WHERE v<o.v AND name=o.name) as ls
             , (SELECT COUNT(1) FROM sale WHERE v<=o.v AND name=o.name) as lse
  FROM sale o

माध्यिका मान तब होगा जब कम-से-या-बराबर गणना मदों की संख्या से आधी होगी

  • एक्रिंगटन 4 आइटम हैं। इसमें से आधा 2 है जो 0..2 (200.00 के अनुरूप) की सीमा में है और 2..3 (300.00 के अनुरूप) की सीमा में भी है

  • बुलिंगडन 4 आइटम भी हैं। 2 रेंज में है 1..2 (मान 300.00) और 2..3 (मान 400.00)

  • कार्डिंगटन 5 आइटम हैं। मान 2.5 2 और 3 के बीच है जो कार्डिंगटन 151 से मेल खाता है।

माध्यिका मान निम्न द्वारा लौटाए गए न्यूनतम और अधिकतम मानों का माध्य है:

SELECT cs.name,v
   FROM
   (SELECT name,v, (SELECT COUNT(1) FROM sale WHERE v<o.v AND name=o.name) as ls
                 , (SELECT COUNT(1) FROM sale WHERE v<=o.v AND name=o.name) as lse
      FROM sale o) cs JOIN
   (SELECT name,COUNT(1)*.5 as cn
      FROM sale
      GROUP BY name) cc ON cs.name=cc.name
 WHERE cn between ls and lse

जो देता है:

Acrington   200.00
Acrington   200.00
Acrington   300.00
Bulingdon   300.00
Bulingdon   400.00
Cardington  151.00

अंत में हम माध्यिका प्राप्त कर सकते हैं:

SELECT name,(MAX(v)+MIN(v))/2 FROM
(SELECT cs.name,v
   FROM
   (SELECT name,v, (SELECT COUNT(1) FROM sale WHERE v<o.v AND name=o.name) as ls
                 , (SELECT COUNT(1) FROM sale WHERE v<=o.v AND name=o.name) as lse
      FROM sale o) cs JOIN
   (SELECT name,COUNT(1)*.5 as cn
      FROM sale
     GROUP BY name) cc ON cs.name=cc.name
 WHERE cn between ls and lse
 ) AS medians
GROUP BY name

देना

Acrington   250.000000
Bulingdon   350.000000
Cardington  151.000000


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql(i)_real_escape_string, पर भरोसा करना सुरक्षित है?

  2. VARCHAR टाइमस्टैम्प को TIMESTAMP में बदलें?

  3. MySQL में टेक्स्ट आयात करना:अजीब प्रारूप

  4. अद्वितीय कुंजी के बिना मौजूद नहीं होने पर रिकॉर्ड डालें

  5. Matplotlib का उपयोग करके ग्राफ को कैसे अपडेट करें