私は検索して検索しましたが、これを機能させることができませんでした。誰かが私を助けてくれたら本当にありがたいです。
プレイしたゲームの情報を格納するテーブルがあります (小さなクイズ アプリケーション)。 最高スコアと最低タイムに基づいて、上位 5 人のプレイヤーを決定できるようにする必要があります。(多くのプレーヤーは最大スコアを持っています)。また、いつでもユーザーのランクを判断する必要があります。
以下は、ゲーム テーブルのサンプルです。
user_id クレジット time_played エイリアス ------- ------- ----------- -------------- 64 490 180 ダプラヤ 93 690 187 スーパーマン 64 336 187 ダプラヤ 75 196 192 フレーク 93 182 197 スーパーマン 57 844 198 ジョン・スミス 75 350 198 フレーク 64 858 384 ダプラヤ 73 858 400 リトルガイ 57 858 412 ジョン・スミス 101 858 420 フラッシュ 73 858 423 リトルガイ 73 858 434 リトルガイ 65 858 460 シーナ 122 858 540 シュガー クイーン 126 858 545 レイチェル 176 350 2417 ファイヤーライト 157 350 2442 ビッグ Q 161 350 2456 ジョーイ・ブルー
私が使用している現在のクエリは次のとおりです。
select top 5 alias,user_id,
rank() over (order by max(credits) desc,min(time_played)) as rank
from games,users
where games.user_id=users.id and users.id <> 20 and games.credits > 0
group by user_id,alias
(クエリからわかるように、エイリアスは実際には users テーブルに格納されています。)
正しい結果が表示されているように見えたので、このクエリは機能していると思いましたが、サイトが公開され、何千ものゲームがあるので、それが間違っていることがわかります。
上記のクエリでは、基本的にスコアが最も高い 5 人のプレイヤーが得られますが、ゲーム時間が最も短いプレイヤーがランク付けされます。(スコアが低いほど速いゲーム)。
このクエリを微調整/変更する方法、または完全に書き直す方法を教えてください。
(注意してください、これは php とループを使用してもっと簡単に行うことができますが、あまり効率的ではありません。)
必要に応じて、さらに情報を提供させていただきます。
前もってありがとう、アーロン。