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
我有一个 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