2017-10-31 4 views
1

私はレクイグリーグのウェブサイトで働いていて、異なるカテゴリのトップスコアラーを掲載したいと考えています。それは十分に簡単ですが、カテゴリの上位5人の得点者に1位と2位を付けて3位にすると、それを示す方法はありますか?ネクタイを含むトップNの結果を得る

Ex: 
Top 3 in Points 
1 - Player A (10 pts) 
2 – Player B (9 pts) 
T3 – Player C (8 pts) 
T3 – Player D (8 pts) 
T3 – Player E (8 pts) 

トップのx%は新しい選手がリーグに入って来るのどちらかとして動作しませんし、私はむしろ、各プレイヤーの追加の計算をやり直す必要はありませんと思います。

+0

をので、あなただけのトップ5得点をしたいです結びつきに関係なく、または5位がネクタイの場合、そのうちの1つだけが必要ですか? – kchason

+0

いいえ、私はトップスコア3を望んでいますが、3位は3ウェイのネクタイなので、5つの結果が返されます。 – THansenite

+0

[T-SQLのWITH TIESの代替]の可能な複製(https://stackoverflow.com/questions/3469107/mysqls-alternative-to-t-sqls-with-ties) – xQbert

答えて

2

私はあなたのテーブル構造を知らないので、私はここでいくつか前提をするつもりですので、必要に応じてテーブル名とカラム名を調整してください。

最初のステップは、トップ3のスコアを取得することになります。

SELECT DISTINCT 
    `score` 
FROM 
    `points` 
LIMIT 3 

次に、これらのスコアを持つすべての人々を得るので、それを一緒に置くことは取得します。

SELECT 
    `name`, -- Whichever fields you have 
    `score` 
FROM 
    `points` 
WHERE 
    `score` IN (
     SELECT DISTINCT 
      `score` 
     FROM 
      `points` 
     LIMIT 3 
    ) 
ORDER BY 
    `points` DESC, -- Sort highest score first 
    `name` ASC; -- When tied, sort alphabetically 
関連する問題