2011-12-08 10 views
0

私は、最も人気のある曲の最大得点を曲の人気順に取得しようとしています。ORDER BY FIELDの値のMySQLサブクエリ

私は、次のフィールドで、 "ゲームプレイ" と呼ばれるテーブルがあります:

  • (プラスいくつかの他の任意のフィールド)

    これまで得点song_id

    • IDを、私が得た最も近いものはこれです:

      SELECT id, song_id, score 
      FROM (
          SELECT id, song_id, score 
          FROM (
           SELECT id, song_id, score 
           FROM gameplay 
           ORDER BY score DESC 
           ) AS all_scores_in_order 
          GROUP BY song_id 
          ) AS top_scores_per_song 
      ORDER BY FIELD (song_id, 3,1,2) 
      

      しかし、ORDER BY FIELDの値は別のサブクエリによって生成されることを願っています。つまり、人気度によってランク付けされたsong_id(テーブル内の行の出現数をカウントする順番)です。

      SELECT song_id 
      FROM gameplay 
      GROUP BY song_id 
      ORDER BY count(id) DESC 
      
  • 答えて

    1

    外部クエリのCount(id)でグループ化して並べ替えることはできませんか?

    これは、出現数、および最大スコアを示すことによって、ソートされたすべての種類の表示される必要があります。

    SELECT song_id, COUNT(id), MAX(score) 
    FROM gameplay 
    GROUP BY song_id 
    ORDER count(id) DESC 
    

    をそれとも、数回表示されるように、各song_idをしたいですか?

    +0

    私は明確にこれを考えていましたが、SELECT MAX(スコア)はテーブル全体の最大値のみを選択するのではなく、各グループから最大スコアを選択することを認識しませんでした。ありがとうCylindric :) –

    +0

    ああ、私は単純な1つのライナーGROUPまたは私が逃したいくつかトリッキーなOVER句に置き換えられて終わったいくつかの美しい巨大なクエリを構築しました:) – Cylindric