2010-02-17 22 views
37

Tengo una tabla que almacena identificaciones y la ciudad donde se encuentra la tienda.Ordene por COUNT por valor

Quiero enumerar todas las tiendas comenzando con las tiendas que se encuentran en la ciudad donde hay más tiendas.

TABLA

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

La salida lo que quiero es la siguiente ya que tengo la mayoría de las tiendas en Nueva York, quiero todo, la ubicación de NYC que se aparece en primer lugar.

1 NYC 
4 NYC 
5 NYC 
2 BOS 
3 BOS 
+0

respuesta exacta https://stackoverflow.com/questions/26187033/mysql-order-by-number-of-occurrences-of-an-element-in-a-column-of-mysql-table? noredirect = 1 & lq = 1 –

Respuesta

44
SELECT count(City), City 
FROM table 
GROUP BY City 
ORDER BY count(City); 

O

SELECT count(City) as count, City 
FROM table 
GROUP BY City 
ORDER BY count; 

Ahh, lo siento, yo estaba malinterpretando su pregunta. Creo que la respuesta de Peter Lang fue la correcta.

+0

Tal vez no lo estoy haciendo bien, pero cuando uso "agrupar por" en lugar de enumerar cada tienda individual, solo aparecerá una tienda para NYC y 1 tienda para BOS. ¿Alguna idea de lo que podría estar yendo mal? – Enkay

+0

Enkay: Eso es exactamente lo que hace el grupo. Condensa entradas idénticas. – EmFi

+1

Sí, pero mis tiendas no son idénticas, tengo 3 tiendas diferentes en Nueva York con una identificación de tienda única. Necesito enumerar cada tienda individual. Solo quiero que sean ordenados por la ciudad con el mayor número de tiendas. – Enkay

25

Esto se calcula el recuento en una consulta separada, se une a él y pedidos por ese recuento (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; 
4

Esta solución no es muy óptimo por lo que si su mesa es muy grande tomará un tiempo para ejecutar pero hace lo que estás pidiendo.

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 

Es decir, para cada ciudad con la que se encuentre, contará el número de veces que esa ciudad aparece en la base de datos.

Descargo de responsabilidad: Esto da lo que está pidiendo pero no lo recomendaría para los entornos de producción donde el número de filas crecerá demasiado.

+0

gr8 trabajo, la consulta funciona bien hasta ahora. – Santanu

+0

Gracias! A mi también me sirvió. –

+2

funciona, gracias, pero ¿cuál es la solución óptima? – Dev

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