SQL समूह द्वारा एक आदेश के साथ


122

मेरे पास टैग्स की एक तालिका है और सूची से उच्चतम गणना टैग प्राप्त करना चाहते हैं।

नमूना डेटा इस तरह दिखता है

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-डेबियन का उपयोग कर रहा हूं

जवाबों:


199

MySQL के सभी संस्करणों में, सिलेक्ट लिस्ट में एग्रीगेट को अलियास करें, और ऑलिस द्वारा ऑर्डर करें:

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

9
IMHO, यह चयनित उत्तर की तुलना में क्लीनर संस्करण है। यह तुरंत स्पष्ट है कि क्या आदेश दिया गया है। बेशक, अगर इसकी एक त्वरित स्क्रिप्ट, जो वास्तव में मायने नहीं रखती है।
जस्टपोरिंग

1
हालांकि ओपी MySQL का उपयोग कर रहा है, इस जवाब ने भी मेरे लिए
एचएसक्यूएल (लिब्रेऑफ़िस

53

संस्करण 5 से पहले MySQL ने ORDER BY क्लॉस में कुल कार्यों की अनुमति नहीं दी थी।

आप इस सीमा के आसपास अपवित्र सिंटैक्स के साथ प्राप्त कर सकते हैं:

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

1, चूंकि यह पहला कॉलम है जिस पर आप ग्रुप बनाना चाहते हैं।


8

मैं MySQL के बारे में नहीं जानता, लेकिन MS SQL में, आप 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

6

ओरेकल में, इस तरह से कुछ अपनी गिनती को अलग करने और थोड़ा बेहतर ऑर्डर करने के लिए अच्छी तरह से काम करता है। मुझे यकीन नहीं है कि यह MySql 4 में काम करेगा।

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

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

3

आप इस सीमा के आसपास पदावनत सिंटैक्स के साथ प्राप्त कर सकते हैं: ORDER BY 1 DESC

यह सिंटैक्स बिल्कुल भी नहीं है, यह SQL99 से E121-03 है।


5
यह एक उत्तर के बजाय एक टिप्पणी होनी चाहिए।
राफेल बैरोस

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

प्रश्न से इसका क्या लेना-देना है? खेत भी एक जैसे नहीं हैं।
ब्लेक सेवेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.