28

我的表有两列: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。

谢谢。

4

2 回答 2

33

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

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

应该给你唯一的名字和每个名字在表中出现的相应次数,按那个数字排序。

于 2009-08-01T19:07:36.270 回答
18

您需要使用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 BYMySQL 手册中提供了有关该子句的更多信息:

12.2.8 选择语法

于 2009-08-01T19:07:47.767 回答