2009-08-28 10 views
159

मैं एक MySQL क्वेरी खोजने की कोशिश कर रहा हूं जो किसी विशेष फ़ील्ड में अलग-अलग मान प्राप्त करेगी, उस मान की घटनाओं की संख्या की गणना करें और फिर परिणामों को गिनती से ऑर्डर करें।MySQL: विशिष्ट मानों की गणना

उदाहरण डाटाबेस

id   name 
-----  ------ 
1   Mark 
2   Mike 
3   Paul 
4   Mike 
5   Mike 
6   John 
7   Mark 

अपेक्षित परिणाम

name  count 
-----  ----- 
Mike  3 
Mark  2 
Paul  1 
John  1 

धन्यवाद

उत्तर

317
SELECT name,COUNT(*) as count FROM tablename GROUP BY name ORDER BY count DESC; 
+1

समूह यहां क्या कर रहा है? यह स्पष्ट नहीं है कि उद्देश्य क्या है? ऐसा लगता है कि अगर आप इसे स्पष्ट रूप से पढ़ रहे हैं तो इसे बाहर करना चाहिए। – Prospero

+16

जबकि एम्बर की क्वेरी प्रश्न के लिए सही उत्तर है, मैं नए लोगों को भटकने से बचने के लिए उनकी टिप्पणी पर सुधार करना चाहता हूं। यदि आप एक MySQL क्वेरी में "समूह द्वारा" छोड़ देते हैं, तो आपको [माइक, 1], [माइक, 1] नहीं मिलता है, आपको एक ही परिणाम मिलता है जो पहली पंक्ति पर नाम होगा, और तालिका में पंक्तियों की संख्या की गिनती, इसलिए इस मामले में [मार्क, 7]। गिनती(), एक समग्र फ़ंक्शन के रूप में पूरे डेटासेट पर काम करता है, निर्दिष्ट, फ़ील्डिंग या निर्दिष्ट फ़ील्ड को एक पंक्ति में संक्षिप्त करता है। निर्दिष्ट फ़ील्ड के अद्वितीय combos के आधार पर डेटासेट को डेटा में विभाजित करके –

+0

@Avatar_Squadron काफी सही; मैंने पिछली टिप्पणी को हटा दिया है - यह मेरे सिर के ऊपर से था, और मैं वास्तव में समूह के बिना गिनती के परिणामों का पालन नहीं करता हूं। :) – Amber

9

क्या कुछ इस तरह के बारे में:

select name, count(*) as num 
from your_table 
group by name 
order by count(*) desc 

यानी, आप नाम और उस समय की संख्या का चयन कर रहे हैं; लेकिन नाम से समूहित करना ताकि प्रत्येक नाम केवल एक बार चुना जा सके।

फिर, आप कई बार, desc; सबसे पहले दिखाई देने वाले उपयोगकर्ता पहले आते हैं।

+0

आपकी क्वेरी ने मेरी मदद की। परिणामस्वरूप कुछ पंक्तियां लौटाती हैं। मैं यह भी जानना चाहता था कि इस परिणाम की गिनती कैसे प्राप्त करें। कुछ प्रश्नों का प्रयास किया लेकिन ऐसा लगता है कि यह कुल मिलाकर गिनती नहीं कर पाता है। क्या आप इसके साथ मदद कर सकते हैं? – Nav

+0

@Nav - क्या गिनती है? पंक्तियों की संख्या वापस आ गई? यह 'SELECT COUNT (DISTINCT नाम) है जो आपकी_table' से गिनती है, तालिका की कुल पंक्तियों की गणना के लिए,' समूह द्वारा 'कथन के बिना पास्कल की क्वेरी करें। –

+0

एक मिनट में क्या अंतर होता है! –

0

बेहतर प्रदर्शन के लिए बस एम्बर के COUNT (*) से COUNT (1) को बदल दिया।

SELECT name, COUNT(1) as count 
FROM tablename 
GROUP BY name 
ORDER BY count DESC; 
संबंधित मुद्दे