如何使用2个表进行此MYSQL查询

时间:2013-07-28 18:13:57

标签: mysql sql database

我将使用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

希望这是有道理的。我真的被卡住了!

1 个答案:

答案 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