2010-02-17 51 views
37

Kimlikleri ve mağazanın bulunduğu şehri depolayan bir tablom var.Sipariş üzerine COUNT değer Sipariş

En çok mağazaların bulunduğu şehirde bulunan mağazalarla başlayan tüm mağazaları listelemek istiyorum.

TABLO

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

istediğim çıktı ben NYC en mağazaları beri, bütün NYC konumu ilk listede olmak istiyorum şudur.

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

Tam Cevap https://stackoverflow.com/questions/26187033/mysql-order-by-number-of-occurrences-of-an-element-in-a-column-of-mysql-table? noredirect = 1 & lq = 1 –

cevap

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

VEYA

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

Ahh, üzgünüm, sorunuzu yanlış yorumlama edildi. Peter Langs'ın cevabının doğru olduğuna inanıyorum.

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; 
+0

Belki de doğru yapmıyorum ama her bir mağazada listelemek yerine "group by" kullandığımda, yalnızca NYC için 1 mağaza ve BOS için 1 mağaza listeleyecektir. Neyin yanlış olabileceği hakkında bir fikrin var mı? – Enkay

+0

Enkay: Tam olarak bu grubun yaptığı şey. Aynı girdileri yoğunlaştırır. – EmFi

+1

Yea ancak mağazalarım aynı değil, NYC'de benzersiz bir mağaza kimliğine sahip 3 farklı mağazam var. Her bir mağazayı listelemem gerek. Sadece en çok mağazaya sahip şehir tarafından sipariş edilmelerini istiyorum. – Enkay

25

Bu kimse bu sayımı (SQL-Fiddle) bunu ve siparişleri katılır, ayrı bir sorguda sayısını hesaplar yürütmek için biraz zaman ama ne soruyorsun.

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 

Yani, karşınıza çıkan her şehir için, bu veritabanının veritabanında kaç defa geçtiğini hesaplıyorsunuz.

Yasal Uyarı: Bu sizin için ne istediğini verir, ancak satır sayısının çok büyüyeceği üretim ortamları için önermem.

4

Bu çözüm masanız çok büyükse sürer böylece çok iyi biri değil:

+0

gr8 çalışması, sorgu şu ana kadar iyi çalışıyor. – Santanu

+0

Teşekkürler! Benim için de çalıştı. –

+2

çalışma, teşekkürler, Ama en uygun çözüm nedir? – Dev

0
SELECT `FirstAddressLine4`, count(*) AS `Count` 
FROM `leads` 
WHERE `Status`='Yes' 
AND `broker_id`='0' 
GROUPBY `FirstAddressLine4` 
ORDERBY `Count` DESC 
LIMIT 0, 8