2008-08-26 17 views
89

द्वारा ऑर्डर के साथ मेरे पास टैग की एक तालिका है और सूची से उच्चतम गिनती टैग प्राप्त करना चाहते हैं।SQL समूह

नमूना डेटा इस

id (1) tag ('night') 
id (2) tag ('awesome') 
id (3) tag ('night') 

तरह

SELECT COUNT(*), `Tag` from `images-tags` 
GROUP BY `Tag` 

का उपयोग कर मुझे वापस डेटा मैं पूरी तरह से तलाश कर रहा हूँ हो जाता है लग रहा है। हालांकि, मैं इसे व्यवस्थित करना चाहता हूं, ताकि उच्चतम टैग गणना पहले हो, और केवल मुझे पहले 20 या तो भेजने के लिए सीमित करें।

मैं इस कोशिश की ...

SELECT COUNT(id), `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER BY COUNT(id) DESC 
LIMIT 20 

और मैं एक बार आ रही है "समूह समारोह का अमान्य उपयोग - ErrNr 1111"

क्या मैं गलत कर रहा हूँ?

मैं उपयोग कर रहा हूँ MySQL 4.1.25-डेबियन

+0

हाँ प्रयास करें, बिल्कुल। किया हुआ। – maxsilver

उत्तर

164

MySQL के सभी संस्करणों में, बस का चयन करें सूची में कुल, और उपनाम से आदेश उर्फ:

SELECT COUNT(id) AS theCount, `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER BY theCount DESC 
LIMIT 20 
+8

आईएमएचओ, यह चयनित उत्तर से क्लीनर संस्करण है। यह तुरंत स्पष्ट है कि क्या आदेश दिया जाता है। बेशक, अगर यह एक त्वरित लिपि है, जो वास्तव में कोई फर्क नहीं पड़ता। – JustAPoring

+1

हालांकि ओपी MySQL का उपयोग कर रहा है, लेकिन इस उत्तर ने मेरे लिए एचएसक्यूएल (लिबर ऑफिस बिल्ट-इन) –

48

MySQL संस्करण 5 से पहले खंड द्वारा आदेश में कुल कार्यों अनुमति नहीं दी। ,

SELECT COUNT(id), `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER BY 1 DESC 
LIMIT 20 

1 के बाद से यह पहला स्तंभ आप पर समूहीकृत करना चाहते है:

आप पदावनत वाक्य रचना के साथ इस सीमा के आसपास मिल सकती है।

7

मुझे MySQL के बारे में पता नहीं है, लेकिन एमएस एसक्यूएल में, आप order by खंड में कॉलम इंडेक्स का उपयोग कर सकते हैं। मैंने group by के साथ गणना करते समय यह किया है क्योंकि यह काम करना आसान हो जाता है।

तो

SELECT COUNT(id), `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER BY COUNT(id) DESC 
LIMIT 20 

हो जाता है

SELECT COUNT(id), `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER 1 DESC 
LIMIT 20 
4

ओरेकल में, कुछ इस तरह अच्छी तरह से काम करता है आपकी गणना अलग और एक छोटे से बेहतर आदेश देने के लिए। मुझे यकीन है कि अगर यह MySql में काम करेंगे नहीं हूँ 4.

select 'Tag', counts.cnt 
from 
    (
    select count(*) as cnt, 'Tag' 
    from 'images-tags' 
    group by 'tag' 
) counts 
order by counts.cnt desc 
+0

10.1.14-मारियाडीबी (MySQL- संगत) में मेरे लिए काम करने लगता है। मैंने सोचा कि मुझे ') के रूप में गणना करना था, लेकिन यह अभी भी 'as' भाग के बिना काम किया था। –

2

आप इस सीमा के आसपास पदावनत वाक्य रचना के साथ प्राप्त कर सकते हैं: आदेश द्वारा 1 DESC

इस वाक्य रचना में पदावनत नहीं है सब, यह SQL99 से E121-03 है।

+4

यह एक उत्तर के बजाय एक टिप्पणी होना चाहिए। –

+7

आपको लगभग छः साल के उत्तर पर टिप्पणी नहीं करनी चाहिए :-) –

+3

Kkkk, पर्याप्त मेला। –

0

इस क्वेरी

SELECT data_collector_id , count (data_collector_id) as frequency 
    from rent_flats 
    where is_contact_person_landlord = 'True' 
    GROUP BY data_collector_id 
    ORDER BY count(data_collector_id) DESC 
+0

में भी काम किया है, इस सवाल के साथ इसका क्या संबंध है? खेतों में भी वही नहीं हैं। –

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