web-dev-qa-db-ja.com

値ごとにCOUNTで注文

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
46
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;

ああ、ごめんなさい、私はあなたの質問を誤解していた。ピーター・ラングスの答えは正しかったと思う。

59
MindStalker

これは別のクエリでカウントを計算し、それを結合してそのカウントで並べ替えます( 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;
29
Peter Lang

このソリューションはあまり最適ではないため、テーブルが非常に大きい場合は実行に時間がかかりますが、求めていることは実行されます。

 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

つまり、出会った各都市について、その都市がデータベースに出現する回数をカウントしています。

免責事項:これはあなたが求めているものを提供しますが、行数が大きくなりすぎる実稼働環境にはお勧めしません。

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