0

使用する 2 つのテーブルがあります: ニュースとタグ

news テーブルには music テーブルに関連する music_id フィールドがあり、tags テーブルには 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

これが理にかなっていることを願っています。私は本当に行き詰まっています!

4

1 に答える 1

0

私はこの質問を「音楽 ID で最も人気のあるタグである音楽 ID の数でタグを並べ替える」と解釈しています。次のクエリは、サブクエリを使用して、 each のタグごとにカウントを計算します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
于 2013-07-28T19:03:10.443 に答える