mysql-get按值和日期分组的前5个内容

qxsslcnc  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(323)

我有一个列表

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个,那么我期望的是第一个列表,但只过滤前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

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

gg58donl

gg58donl1#

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

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

相关问题