Ich habe eine Tabelle, die IDs und die Stadt, in der sich der Laden befindet, speichert.
Ich möchte alle Geschäfte auflisten, die mit den Geschäften beginnen, die sich in der Stadt befinden, in der sich die meisten Geschäfte befinden.
TABELLE
ID CITY
1 NYC
2 BOS
3 BOS
4 NYC
5 NYC
Die Ausgabe, die ich möchte, ist die folgende, da ich die meisten Geschäfte in NYC habe. Ich möchte, dass alle Standorte in NYC zuerst aufgeführt werden.
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;
Ah, Entschuldigung, ich habe Ihre Frage falsch interpretiert. Ich glaube, Peter Langs Antwort war die richtige.
Dieser berechnet die Anzahl in einer separaten Abfrage, fügt sie zusammen und ordnet nach dieser Anzahl ( 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;
Diese Lösung ist nicht sehr optimal. Wenn Ihre Tabelle sehr groß ist, kann dies jedoch einige Zeit in Anspruch nehmen.
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
Das heißt, für jede Stadt, der Sie begegnen, zählen Sie, wie oft diese Stadt in der Datenbank vorkommt.
Haftungsausschluss: Dies gibt das, wonach Sie fragen, aber ich würde es nicht für Produktionsumgebungen empfehlen, in denen die Anzahl der Zeilen zu groß wird.
SELECT `FirstAddressLine4`, count(*) AS `Count`
FROM `leads`
WHERE `Status`='Yes'
AND `broker_id`='0'
GROUPBY `FirstAddressLine4`
ORDERBY `Count` DESC
LIMIT 0, 8