MYSQL - 获取按值和日期分组的 TOP 5 内容

MYSQL - Get TOP 5 content grouped by value and date

我有一个 table 列

id    date   title 

我想获取每个标题每个日期的总出现次数列表。例如得到:

date       title       total
20 Apr  - My Title A  - 3
20 Apr  - My Title B  - 2
21 Apr  - My Title A  - 5
22 Apr  - My Title B  - 1
22 Apr  - My Title C  - 1
23 Apr  - My Title A  - 6
23 Apr  - My Title B  - 2
23 Apr  - My Title C  - 5
24 Apr  - My Title C  - 2
24 Apr  - My Title D  - 2

但我只想获取具有最多值的记录,因此根据上面的示例,总出现次数为:

 A 14
 B 5
 C 8
 D 2

如果我只想要前 2 个,那么我期望的是第一个列表,但只过滤热门标题:

20 Apr  - My Title A  - 3
21 Apr  - My Title A  - 5
22 Apr  - My Title C  - 1
23 Apr  - My Title A  - 6
23 Apr  - My Title C  - 5
24 Apr  - My Title C  - 2

我的第一种方法是执行一个子查询,按标题对顶部进行计数,然后过滤标题在计数最多的列表中的位置。但是我想知道有没有更简单的方法。

我的初始答案将与问题中提出的解决方案相同:

Select DATE(date) as date, top.title, count(*) as total  from (
    Select  title, count(*) as total 
    from List
    where date > (current_date - interval 30 day)
    group by title 
    order by total
    desc limit 5) top
 left join List on top.title = List.title 
 where List.date > (current_date - interval 30 day)
 group by DATE(List.date), top.title
 order by date asc