2

わかりましたので、次のデータベースがあります。

CREATE TABLE IF NOT EXISTS `highscores` (
  `lid` int(11) NOT NULL,
  `username` varchar(15) NOT NULL,
  `score` int(16) NOT NULL,
  PRIMARY KEY  (`lid`,`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

ふたはレベルIDです。

テーブルに次の値があるとしましょう。

lid, username,score

1,sam,15 
1,joe,12
1,sue,6
1,josh,9
2,sam,8
2,joe,16 
2,sue,4
3,sam,65 
4,josh,87 
4,sue,43
5,sam,12
5,sue,28
5,joe,29
and so on.

次のものを取得するためにクエリを作成する方法(または必要に応じて一連のクエリ)を作成するにはどうすればよいですか

sam has 3 high scores
joe has 2 high scores
josh has 1 high score 

前もって感謝します。

4

2 に答える 2

2

私はそれをテストしていませんが、次のクエリを試してください

select 
    concat(h.username ," has ", count(h.username)," high scores ")
from
    highscores h inner join
    (select lid, max(score) as maxscore
     from highscores group by lid) t on h.lid = t.lid and h.score = t.maxscore
group by h.username
于 2012-04-19T06:12:37.953 に答える
2

あなたが説明したことから、このクエリは必要なものを生成します

SELECT username,COUNT(*) as num_highscores FROM (
SELECT lid,username
FROM highscores h1
WHERE score=(
    SELECT MAX(score) 
    FROM highscores h2 
    WHERE h2.lid=h1.lid
)
) AS high_scores
GROUP BY username
ORDER BY num_highscores DESC

サンプルデータで得られる結果は異なりますが:

  • サム2
  • ジョー2
  • ジョシュ 1
于 2012-04-19T06:13:50.877 に答える