mysql获取具有最大聚合计数的条目

Posted

技术标签:

【中文标题】mysql获取具有最大聚合计数的条目【英文标题】:mysql get entry with max count of aggregation 【发布时间】:2021-07-30 00:09:17 【问题描述】:

我有一个 email_patterns 表,我想为每个域找到最常见的模式:

email_patterns
id, domain, pattern
1, microsoft.com, first.last
2, microsoft.com, first.last
3, microsoft.com, last.first
4, microsoft.com, first
5, apple.com, last
6, apple.com, last.first
7, apple.com, last.first

查询应该返回

domain, pattern, count
microsoft.com, first.last, 2
apple.com, last.first, 2

这是获取每个域、模式组合的计数的方法:

SELECT domain, pattern, COUNT(1) count FROM email_patterns GROUP BY domain, pattern;

但是,我只想获取每个域中计数最高的域模式组合。

【问题讨论】:

【参考方案1】:

接下来你只需要ROW_NUMBER():

SELECT domain, pattern, cnt
FROM (SELECT domain, pattern, COUNT(*) as cnt,
             ROW_NUMBER() OVER (PARTITION BY domain ORDER BY COUNT(*) DESC) as seqnum
      FROM email_patterns
      GROUP BY domain, pattern
     ) dp
WHERE seqnum = 1;

【讨论】:

以上是关于mysql获取具有最大聚合计数的条目的主要内容,如果未能解决你的问题,请参考以下文章

如何从计数中选择具有最大产生值的行

T-SQL:创建四个连接表的聚合视图的有效方法(每个项目的每个审计类型的最大审计条目)

MySQL查询仅返回具有计数的重复条目

用于获取不同日期以及唯一计数最大值的大查询

如何获取集合中的最大字段值?

在向量中查找具有相同最大值的条目的函数