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
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.
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;
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.
SELECT `FirstAddressLine4`, count(*) AS `Count`
FROM `leads`
WHERE `Status`='Yes'
AND `broker_id`='0'
GROUPBY `FirstAddressLine4`
ORDERBY `Count` DESC
LIMIT 0, 8