IDとストアのある都市を格納するテーブルがあります。
ほとんどの店がある都市にある店から始まるすべての店をリストしたいと思います。
表
ID CITY
1 NYC
2 BOS
3 BOS
4 NYC
5 NYC
NYCに最も多くの店舗があるため、必要な出力は次のとおりです。NYCのすべての場所を最初にリストする必要があります。
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;
ああ、ごめんなさい、私はあなたの質問を誤解していた。ピーター・ラングスの答えは正しかったと思う。
これは別のクエリでカウントを計算し、それを結合してそのカウントで並べ替えます( 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;
このソリューションはあまり最適ではないため、テーブルが非常に大きい場合は実行に時間がかかりますが、求めていることは実行されます。
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
つまり、出会った各都市について、その都市がデータベースに出現する回数をカウントしています。
免責事項:これはあなたが求めているものを提供しますが、行数が大きくなりすぎる実稼働環境にはお勧めしません。
SELECT `FirstAddressLine4`, count(*) AS `Count`
FROM `leads`
WHERE `Status`='Yes'
AND `broker_id`='0'
GROUPBY `FirstAddressLine4`
ORDERBY `Count` DESC
LIMIT 0, 8