Заказ по COUNT за значение - PullRequest
       16

Заказ по COUNT за значение

45 голосов
/ 17 февраля 2010

У меня есть таблица, в которой хранятся идентификаторы и город, в котором находится магазин.

Я хочу перечислить все магазины, начиная с магазинов в городе, где больше всего магазинов.

Таблица

ID CITY
1  NYC
2  BOS
3  BOS
4  NYC
5  NYC

Вывод, который я хочу получить, следующий: поскольку у меня больше магазинов в Нью-Йорке, я хочу, чтобы все местоположения в Нью-Йорке были перечислены первыми.

1  NYC
4  NYC
5  NYC
2  BOS
3  BOS

Ответы [ 4 ]

58 голосов
/ 17 февраля 2010
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;

Ах, прости, я неправильно истолковал твой вопрос. Я полагаю, что ответ Питера Лэнгса был правильным.

29 голосов
/ 17 февраля 2010

Этот метод рассчитывает количество в отдельном запросе, объединяет его и упорядочивает по этому количеству ( 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;
6 голосов
/ 17 февраля 2010

Это решение не очень оптимальное, поэтому, если ваша таблица очень большая, ее выполнение займет некоторое время, но оно выполняет то, что вы просите.

 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

То есть для каждого города, с которым вы сталкиваетесь, вы подсчитываете, сколько раз этот город встречается в базе данных.

Отказ от ответственности: это дает то, что вы просите, но я бы не рекомендовал это для производственных сред, где число строк будет слишком большим.

0 голосов
/ 13 мая 2014
SELECT `FirstAddressLine4`, count(*) AS `Count` 
FROM `leads` 
WHERE `Status`='Yes'
AND `broker_id`='0'
GROUPBY `FirstAddressLine4` 
ORDERBY `Count` DESC 
LIMIT 0, 8
...