2010-02-17 22 views
37

Ho una tabella che memorizza gli ID e la città in cui si trova il negozio.Ordina per COUNT per valore

Desidero elencare tutti i negozi che iniziano con i negozi che si trovano nella città dove ci sono più negozi.

TABELLA

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

L'uscita che voglio è la seguente dal momento che ho la maggior parte dei negozi a New York, voglio tutta la posizione di New York per essere elencati prima.

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

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

risposta

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

O

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

Ahh, mi dispiace, mi è stato interpretando male la tua domanda. Credo che la risposta di Peter Langs sia stata corretta.

+0

Forse non lo sto facendo bene, ma quando uso "group by" invece di elencare ogni singolo negozio, verrà elencato solo 1 negozio per NYC e 1 negozio per BOS. Qualche idea di cosa potrebbe andare storto? – Enkay

+0

Enkay: Questo è esattamente ciò che fa il gruppo. Condensa voci identiche. – EmFi

+1

Sì, ma i miei negozi non sono identici, ho 3 negozi diversi a New York con un ID negozio unico. Devo elencare ogni singolo negozio. Voglio solo che siano ordinati dalla città con il maggior numero di negozi. – Enkay

25

Questo si calcola il conteggio in una query separata, si unisce e ordini che contano (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

Questa soluzione non è molto ottimale quindi se il vostro tavolo è molto grande ci vorrà un po 'di tempo per eseguire ma fa quello che stai chiedendo.

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 

Cioè, per ogni città che si incontra si conta il numero di volte che quella città si verifica nel database.

Disclaimer: questo fornisce ciò che si richiede ma non lo consiglierei per gli ambienti di produzione in cui il numero di righe diventerà troppo grande.

+0

gr8 funziona, la query sta funzionando bene fino ad ora. – Santanu

+0

Grazie! Ha funzionato anche per me. –

+2

funziona, grazie, ma qual è la soluzione ottimale? – Dev

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