2009-08-01 15 views
22

द्वारा क्रमबद्ध शीर्ष विशिष्ट परिणामों का चयन करें मेरी तालिका में दो कॉलम हैं: आईडी और नाम।आवृत्ति

id | name 
---------- 
1 Jeff 
2 Sam 
3 Carl 
4 Sam 
5 Carl 
6 Jeff 
7 Dave 
8 Jeff 

क्या मैं प्राप्त करने के लिए चाहते हैं यह है:: डेटा इस तरह दिखता है

name | frequency 
---------------- 
Jeff  3 
Carl  2 
Sam  2 
Dave  1 

अनिवार्य रूप से, मैं एक SQL क्वेरी उस तालिका में अद्वितीय नामों में गिना जाता है की जरूरत है, और उनके frequnecy द्वारा उन्हें क्रमबद्ध करता । यदि मायने रखता है तो मैं MySQL का उपयोग कर रहा हूं।

धन्यवाद-आप।

उत्तर

25

मैं इसे परीक्षण किया है नहीं, इसलिए वाक्य रचना सही नहीं हो सकता है, लेकिन कुछ इस तरह के बारे में क्या:

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

आप अद्वितीय नामों देना चाहिए और समय की संख्या वही वे तालिका में appeat, उस नंबर

+1

यह काम किया। आपका बहुत बहुत धन्यवाद। –

+1

आपका स्वागत है :-) –

+0

बस थोड़ा सा ऑर्डर क्लॉज "फ्रीक्वेंसी अवरुद्ध द्वारा ऑर्डर" जैसा हो सकता है साथ ही – Elnoor

13

द्वारा आदेश दिया तुम एक GROUP BY उपयोग करने की आवश्यकता:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC; 

यह होगा GROUP BYname (किसी भी गैर सकल कॉलम को GROUP BY खंड में नामित करने की आवश्यकता है) और फिर COUNT प्रत्येक name की आवृत्ति।

आप केवल शीर्ष 25 चाहते हैं, आप तो इस तरह के रूप में एक LIMIT खंड जोड़ने के लिए आगे बढ़ सकते हैं:

:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC 
LIMIT 25; 

GROUP BY खंड बारे में अधिक जानकारी MySQL मैनुअल में उपलब्ध है 12.2.8 SELECT Syntax

+0

धन्यवाद, एंड्रयू। आप बहुत अच्छे हैं। –

संबंधित मुद्दे