选择按频率排序的最重要的不同结果

Posted

技术标签:

【中文标题】选择按频率排序的最重要的不同结果【英文标题】:Select top distinct results ordered by frequency 【发布时间】:2010-11-16 01:52:32 【问题描述】:

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

谢谢。

【问题讨论】:

【参考方案1】:

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

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

应该为您提供唯一的名称以及每个名称在表格中出现的相应次数,按该数字排序。

【讨论】:

只是一点点添加顺序子句也可能像“order by frequency desc”【参考方案2】:

您需要使用GROUP BY

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

这将GROUP BYname(任何非聚合列都需要在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

【讨论】:

谢谢你,安德鲁。你真好。

以上是关于选择按频率排序的最重要的不同结果的主要内容,如果未能解决你的问题,请参考以下文章

按频率/值排序离散 x 比例

按元素频率顺序遍历多重集的最简单方法?

按频率排序列表

计算列表中单词的频率并按频率排序

在结构中按频率对数组中的字母进行排序

算法按频率高低来进行排序