首页 > 解决方案 > 查找sql​​中每个不同行的最大计数

问题描述

假设我有一个如下所示的表格:

Genre       | User_id
Animations  |  33
Animations  |  35
Animations  |  33
Thriller    |  39
Thriller    |  35
Thriller    |  35
Thriller    |  35

这张表显示了一个电影类型和每个评论过该类型电影的用户。(Animations,33) 表示 user_id 为 33 的用户对动画电影进行了评分。我想做的是为用户拥有的每个类型查找对该类型的电影评分最多(假设只有一部)以及有多少评分。

所以在上面的例子中,解决方案是:

Animations  |  33 | 2 
Thriller    |  35 | 3 

如何使用 sql 有效地完成这项工作?任何帮助将不胜感激

提前致谢

标签: mysqlsql

解决方案


在统计学中,这称为模式。您可以使用聚合和窗口函数:

select gu.*
from (select genre, user_id, count(*) as cnt,
             row_number() over (partition by genre order by count(*) desc) as seqnum
      from t
      group by genre, user_id
     ) gu
where seqnum = 1;

推荐阅读