Ordina per COUNT per valore

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

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

TAVOLO

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

L’output che voglio è il seguente poiché ho il maggior numero di negozi a New York, voglio che tutti i luoghi di New York vengano elencati per primi.

 1 NYC 4 NYC 5 NYC 2 BOS 3 BOS 

 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, stavo interpretando male la tua domanda. Credo che la risposta di Peter Langs sia stata corretta.

Questo calcola il conteggio in una query separata, lo unisce e ordina per quel conteggio ( 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; 

Questa soluzione non è ottimale, quindi se la tua tabella è molto grande ci vorrà del 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 incontri ti conteggia il numero di volte in cui quella città si trova nel database.

Dichiarazione di non responsabilità: fornisce ciò che stai chiedendo ma non lo consiglierei per gli ambienti di produzione in cui il numero di righe diventerà troppo grande.

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