2009-08-01 14 views
22

Mi tabla tiene dos columnas: id y nombre. La información es el siguiente:Seleccione los mejores resultados distintos ordenados por frecuencia

id | name 
---------- 
1 Jeff 
2 Sam 
3 Carl 
4 Sam 
5 Carl 
6 Jeff 
7 Dave 
8 Jeff 

Lo que quiero obtener es la siguiente:

name | frequency 
---------------- 
Jeff  3 
Carl  2 
Sam  2 
Dave  1 

Esencialmente, necesito una consulta SQL que cuenta los nombres únicos dentro de la tabla, y los ordena por su frequnecy . Estoy usando MySQL si es importante.

Gracias.

Respuesta

25

Yo no lo he probado, por lo que la sintaxis puede ser que no sea perfecto, pero ¿qué pasa algo como esto:

select name, count(*) as frequency 
from your_table 
group by name 
order by count(*) desc 

deben darle nombres únicos y el número correspondiente de tiempo que appeat en la tabla, ordenados por ese número

+1

Esto funcionó. Muchas gracias. –

+1

De nada :-) –

+0

Solo una pequeña cláusula de orden de adición puede ser como "ordenar por frecuencia desc" también – Elnoor

13

Es necesario utilizar un GROUP BY:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC; 

Esto hará GROUP BYname (cualquiera que no sea agregada las columnas deben nombrarse en la cláusula GROUP BY) y luego COUNT la frecuencia de cada name.

Si desea que sólo los 25 primeros, a continuación, puede proceder a añadir una cláusula LIMIT como tal:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC 
LIMIT 25; 

Más información sobre la cláusula GROUP BY está disponible en el Manual de de MySQL:

12.2.8 SELECT Syntax

+0

Gracias, Andrew. Muy amable por tu parte. –

Cuestiones relacionadas