选择按频率排序的顶部不同结果

时间:2009-08-01 19:04:57

标签: sql mysql count distinct

我的表有两列:id和name。数据如下所示:

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

我想要获得的是:

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

基本上,我需要一个SQL查询来计算表中的唯一名称,并根据它们的频率对它们进行排序。如果重要,我正在使用MySQL。

感谢-你。

2 个答案:

答案 0 :(得分:28)

我还没有测试过,所以语法可能不完美,但是这样的事情呢:

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

应该为您提供唯一的名称以及它们在表格中出现的相应时间,按该号码排序

答案 1 :(得分:16)

您需要使用GROUP BY

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

这将GROUP BY name(任何非汇总列需要在GROUP BY子句中命名),然后COUNT每个name的频率

如果您只想要前25名,那么您可以继续添加LIMIT条款:

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

有关GROUP BY子句的更多信息,请参阅MySQL手册:

  

12.2.8 SELECT Syntax