0

私はトーナメント システムを構築しており、次の 2 つの基準に基づいてチームを並べ替える必要があります。

  1. ポイント(3連勝で2ポイント)
  2. ゲームの違い (ゲームの勝敗)

これで、ポイント用のテーブル列が 1 つ、勝ったゲームごとに 1 つ、負けたゲームごとに 1 つになりました。

ポイントでソートされたデータベースから結果を取得します(ORDER BY points DESC)。問題は個人ランキング。チーム A とチーム B のポイント数が同じで、チーム B の方が勝ちゲームと負けゲームの差が正の場合、チーム B はチーム A よりも高くランク付けされます。

すべてのゲームが同時に行われるわけではなく、一部のチームはスケジュールに遅れをとっている可能性があるため、完全に可能なシナリオは、一方のチームが他方よりも多くの勝利を収めているが、差がより悪いということです。

今、私が思いついた唯一の解決策は次のとおりです。

  1. DBからデータを取得する(ポイント順)
  2. 各ポイント値の出現回数をカウントします (例: 9pts.x2、7pts.x5...)
  3. 手順 2 に従って、必要な配列の数を作成します。
  4. ポイント値に応じて、これらの配列にデータを並べ替えます。
  5. 配列の長さが 1 より長い場合は、勝ったゲームと負けたゲームの差で並べ替えます。
  6. 最終結果を印刷します。

これは私には非常に非効率的です。より良いアイデアはありますか?

4

1 に答える 1

1

これはうまくいきます:

select name, wins, losses, points, (wins - losses) as "diff"
from teams
order by points desc, diff desc

デモ: http://sqlfiddle.com/#!2/4ea97/1

于 2013-09-04T19:15:55.430 に答える