group_concat का उपयोग कर mysql में मंझला ढूँढना
क्वेरी:
SELECT
IF(count%2=1,
SUBSTRING_INDEX(substring_index(data_str,",",pos),",",-1),
(SUBSTRING_INDEX(substring_index(data_str,",",pos),",",-1)
+ SUBSTRING_INDEX(substring_index(data_str,",",pos+1),",",-1))/2)
as median
FROM (SELECT group_concat(val order by val) data_str,
CEILING(count(*)/2) pos,
count(*) as count from data)temp;
स्पष्टीकरण:
छंटाई अंदर group_concat समारोह से आदेश का उपयोग कर
स्थिति (पीओएस) किया जाता है और तत्वों की कुल संख्या (गिनती) पहचान है fied। स्थिति की पहचान करने के लिए CEILING हमें नीचे दिए गए चरणों में substring_index फ़ंक्शन का उपयोग करने में मदद करता है।
गिनती के आधार पर, मूल्यों की भी अजीब संख्या का निर्णय लिया जाता है।
- विषम मान: substring_index का उपयोग करके सीधे pos से संबंधित तत्व का चयन करें।
- यहां तक कि मूल्य: pos और pos + 1 से संबंधित तत्व ढूंढें, फिर उन्हें जोड़ें और औसत प्राप्त करने के लिए 2 से विभाजित करें।
अंत में औसत की गणना की जाती है।
स्रोत
2014-12-03 13:45:32
ध्यान दें कि आपके द्वारा उल्लिखित समाधान में डुप्लिकेट मान होने पर औसत नहीं मिलेगा। (यह तब विफल हो जाता है जब औसत में डुप्लिकेट होता है) –
मैं ईमानदारी से समझ नहीं पा रहा हूं कि कैसे लाखों लोगों द्वारा MySQL का उपयोग किया जाता है और दशकों से आसपास रहा है लेकिन मध्यस्थ की गणना करने के लिए कोई फ़ंक्शन नहीं है। क्या कोई अन्य डेटा-केंद्रित सिस्टम है जिसने गणित को लागू नहीं किया है जिसे आमतौर पर 4-10 ग्रेड में 9-10 वर्ष के बच्चों को पढ़ाया जाता है? –