web-dev-qa-db-fra.com

Commande par COUNT par valeur

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

Je veux énumérer tous les magasins en commençant par les magasins situés dans la ville où se trouvent le plus grand nombre 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
44
Enkay
SELECT count(City), City
FROM table
GROUP BY City
ORDER BY count(City);

OR

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 pense que Peter Langs a répondu correctement.

56
MindStalker

Celui-ci calcule le nombre dans une requête séparée, la 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;
28
Peter Lang

Cette solution n’est pas très optimale, donc si votre table est très grande, l’exécution prend du 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

Autrement dit, pour chaque ville que vous rencontrez, vous comptez le nombre de fois que cette ville apparaît dans la base de données.

Avertissement: Cela correspond à ce que vous demandez, mais je ne le recommanderais pas pour les environnements de production où le nombre de lignes deviendra trop important.

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