我将使用2个表:新闻和标签
新闻表具有与音乐表相关的music_id字段,并且标签表具有与tag_id列相同的字段。它为每位艺术家保留多个标签条目。
标签看起来像这样
music_id | tag_id | user_id
3 2 7
3 3 12
9 17 52
因此,每个用户都可以使用多个彼此不同的标签来标记艺术家。
我想从每个新闻帖子(news.music_id)中获取music_id,并在每一行中找到每位艺术家的顶级标签。
所以它会像
music_id | top_tag
22 6
15 4
13 9
22 6
15 4
之后我想按最受欢迎的方式订购标签。
所以我留下了像
这样的结果count | top_tag
2 6
2 4
1 9
希望这是有道理的。我真的被卡住了!
答案 0 :(得分:0)
我将这个问题解释为“按音乐ID的数量排序标签,它们是音乐ID中最受欢迎的标签”。以下查询使用子查询来计算每个music_id
上的标记计数。它还为最终聚合找到每个“music_id”的最大计数:
select mt.tag_id, count(*) as musiccnt
from (select music_id, tag_id, count(*) as cnt
from tags t
group by music_id
) mt join
(select music_id, max(cnt) as maxcnt
from (select music_id, tag_id, count(*) as cnt
from tags t
group by music_id
) mt
group by music_id
) m
on mt.music_id = m.music_id and mt.cnt = m.maxcnt
group by mt.tag_id
order by musiccnt desc