我有一个存储ID和商店所在城市的表格。
我想列出从商店最多的商店开始的所有商店。
表
ID CITY
1 NYC
2 BOS
3 BOS
4 NYC
5 NYC
我想要的输出如下,因为我在纽约市拥有最多的商店,我希望首先列出所有纽约市的位置。
1 NYC
4 NYC
5 NYC
2 BOS
3 BOS
答案 0 :(得分:58)
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;
啊,对不起,我误解了你的问题。我相信Peter Langs的回答是正确的。
答案 1 :(得分:28)
这个计算单独查询中的计数,加入它和按该计数排序的订单(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;
答案 2 :(得分:6)
这个解决方案并不是一个非常理想的解决方案,所以如果你的表非常大,那么执行它需要一些时间,但它可以满足你的要求。
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
也就是说,对于您遇到的每个城市,您都在计算该城市在数据库中出现的次数。
免责声明:这可以满足您的要求,但我不建议将其用于行数过大的生产环境。
答案 3 :(得分:0)
SELECT `FirstAddressLine4`, count(*) AS `Count`
FROM `leads`
WHERE `Status`='Yes'
AND `broker_id`='0'
GROUPBY `FirstAddressLine4`
ORDERBY `Count` DESC
LIMIT 0, 8