2010-02-17 12 views
37

मेरे पास एक सारणी है जो आईडी और उस शहर को संग्रहीत करती है जहां स्टोर स्थित है।COUNT प्रति मान

मैं उन स्टोरों से शुरू होने वाले सभी स्टोरों को सूचीबद्ध करना चाहता हूं, जहां सबसे अधिक स्टोर हैं।

टेबल

ID CITY 
1 NYC 
2 BOS 
3 BOS 
4 NYC 
5 NYC 

उत्पादन मैं चाहता हूँ के बाद से मैं NYC में सबसे भंडार है, मैं चाहता हूँ सब NYC स्थान पहले सूचीबद्ध होने के लिए निम्नलिखित है।

1 NYC 
4 NYC 
5 NYC 
2 BOS 
3 BOS 
+0

सटीक उत्तर https://stackoverflow.com/questions/26187033/mysql-order-by-number-of-occurrences-of-an-element-in-a-column-of-mysql-table? noredirect = 1 और lq = 1 –

उत्तर

44
SELECT count(City), City 
FROM table 
GROUP BY City 
ORDER BY count(City); 

या

SELECT count(City) as count, City 
FROM table 
GROUP BY City 
ORDER BY count; 

आह, माफ करना, मैं आपके सवाल का गलत व्याख्या की गई थी। मेरा मानना ​​है कि पीटर लैंग्स का जवाब सही था।

+0

हो सकता है कि मैं इसे सही नहीं कर रहा हूं लेकिन जब मैं प्रत्येक व्यक्तिगत स्टोर को सूचीबद्ध करने के बजाय "समूह द्वारा" का उपयोग करता हूं तो यह केवल एनवाईसी के लिए 1 स्टोर और बीओएस के लिए 1 स्टोर सूचीबद्ध करेगा। कोई विचार क्या गलत हो सकता है? – Enkay

+0

एनके: यह वही समूह है जो करता है। यह समान प्रविष्टियों को नियंत्रित करता है। – EmFi

+1

हाँ, लेकिन मेरे स्टोर समान नहीं हैं, मेरे पास एनवाईसी में एक अद्वितीय स्टोर आईडी के साथ 3 अलग-अलग स्टोर हैं। मुझे प्रत्येक व्यक्तिगत स्टोर की सूची की आवश्यकता है। मैं बस उन्हें शहर द्वारा आदेशित सबसे अधिक दुकानों के साथ आदेश देना चाहता हूं। – Enkay

25

यह एक, एक अलग क्वेरी में गिनती गणना करता है कि गणना (SQL-Fiddle) द्वारा यह और आदेश मिलती है:

SELECT c.id, c.city 
FROM cities c 
JOIN (SELECT city, COUNT(*) AS cnt 
     FROM cities 
     GROUP BY city 
    ) c2 ON (c2.city = c.city) 
ORDER BY c2.cnt DESC; 
4

यह समाधान एक बहुत इष्टतम एक इसलिए यदि आपके तालिका बहुत बड़ी है यह ले जाएगा नहीं है निष्पादित करने के लिए कुछ समय है लेकिन यह वही करता है जो आप पूछ रहे हैं।

select c.city, c.id, 
     (select count(*) as cnt from city c2 
     where c2.city = c.city) as order_col 
from city c 
order by order_col desc 

यही है कि आप जिस शहर में आते हैं, उसके लिए डेटाबेस में उस समय की संख्या की गणना कर रहे हैं।

अस्वीकरण: यह आपको जो भी मांग रहा है उसे देता है लेकिन मैं इसे उत्पादन वातावरण के लिए अनुशंसा नहीं करता हूं जहां पंक्तियों की संख्या बहुत बड़ी हो जाएगी।

+0

gr8 काम, क्वेरी अभी तक ठीक चल रहा है। – Santanu

+0

धन्यवाद! मेरे लिए भी काम किया। –

+2

इसका काम, धन्यवाद, लेकिन इष्टतम समाधान क्या है? – Dev

0
SELECT `FirstAddressLine4`, count(*) AS `Count` 
FROM `leads` 
WHERE `Status`='Yes' 
AND `broker_id`='0' 
GROUPBY `FirstAddressLine4` 
ORDERBY `Count` DESC 
LIMIT 0, 8 
संबंधित मुद्दे