Ordre par COUNT par valeur

J’ai une table qui stocke les identifiants et la ville où se trouve le magasin.

Je veux lister tous les magasins en commençant par les magasins de la ville où il y a le plus de magasins.

TABLE

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

La sortie que je veux est la suivante puisque j’ai le plus grand nombre de magasins à New York, je veux que tous les emplacements de New York soient listés en premier.

 1 NYC 4 NYC 5 NYC 2 BOS 3 BOS 

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

OU

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

Ahh, désolé, j’ai mal interprété votre question. Je crois que la réponse de Peter Lang était la bonne.

Celui-ci calcule le compte dans une requête séparée, le joint et ordonne par ce nombre ( 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; 

Cette solution n’est pas très optimale, donc si votre table est très volumineuse, son exécution prendra un certain temps, mais elle fait ce que vous demandez.

  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 

C’est-à-dire que pour chaque ville que vous rencontrez, vous comptez le nombre de fois où cette ville est présente dans la firebase database.

Disclaimer: Cela donne ce que vous demandez, mais je ne le recommanderais pas pour les environnements de production où le nombre de lignes deviendrait trop important.

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