0

私はこれらのテーブルを持っています(いくつかのサッカーテーブル)

  1. リーグ:ID、名前
  2. チーム:Id、Name、IdLeague
  3. ステージ:Id、Number、IdLeague
  4. 一致:Id、IdStage、Date、IdTeam1、IdTeam2、Team1Score、Team2Score

私の目標は、いくつかのリーグのランキングを計算することです。

ポジション、TeamName、Wins、Draws、Defeats、GoalsScored、GoalsConceded、Points(3 * WIns + Draws)。

2つのチームが同じポイント数を持っている場合、より多くの可能性があります(チームAとチームB)

  1. ゲームチームAとチームBがあったが、ゲームチームBとチームAがなかった場合は、ゴールの差が大きいチーム(GoalsScored-GoalsConceded)が有利です。
  2. 彼らがリーグでお互いに両方のゲームをプレイした場合、その2つのゲームでより多くのポイントを持つチームが有利です。それらの2つのゲームで同じ数のポイントを獲得した場合、それらの2つのゲームでより良いゴール差を持つチームです。有利に
  3. 2)との差が同じである場合、これら2つの直接試合で得点が多いチームが有利です。
  4. 3)決定できない場合は、リーグでゴール差の大きいチームが勝ちます
  5. 4)決定できない場合、リーグで得点したゴールが多いチームが勝ちます
  6. 5)決定できない場合、..私は知りません:)

リーグテーブル:3〜4行あります
チームテーブル:60〜80行(20チーム/リーグ)ステージテーブル:114〜152行(38ステージ/リーグ)
一致テーブル:1149〜 1520行(10試合/ステージ)

  1. SQLサーバーで1つのリーグのすべての集計を作成するか、そのリーグからすべての一致を選択してサーバーですべての計算を行う方がよいでしょうか。

  2. そのランキングは1つの選択で計算できますか?

4

2 に答える 2

1

あなたの質問は、これらすべての計算を行う方法ではなく、SQL Serverまたは「サーバー」(つまり、データを選択してアプリケーションで計算を行うことを意味すると思います)のどこで行うかということです。 )。

私が正しく理解していると仮定すると、それはあなたがそれをどのように実装できるかに依存します。SQL Serverは、集計計算(sumなどを使用したgroup by)の実行には非常に優れていますが、ループ(カーソルなどの使用)にはあまり適していません。

したがって、結果を取得するためのクエリを作成できる場合は、SQLで実行してください。「結果セットの各行に対して、他のクエリを実行し、変数を更新するなどのいくつかの操作を実行する必要がある場合(SQLでカーソルを使用することを意味します)、結果セットをアプリケーションに返し、そこでループします。

于 2012-04-06T11:35:41.920 に答える
0

リーグ外のゲームがあると思います。

まず、チームの数が奇数であるか、雨が降っていて、すべてのチームが同じ数のゲームをプレイしているわけではない場合、ポイントはリンゴ同士ではありません。

なぜ1を2とは違うものとして扱うのですか?それはポイントと同じであるため、直接対決し、ほとんどの勝利を言います。引き分けがあった場合、彼らは両方とも引き分けを得ました。

2. inリーグは、まるでリーグランキングであるかのように不要であり、お互いにプレーした場合、同じリーグに所属します。

1-3を1)直接の勝利2)直接の目標に置き換えることができます。

私が提案するものはどこですか

0   total points
1   league points
2   head to head wins
3   head to head goals
4   league goals
5   total goals

私は合計ゴールを最後に置くので、AチームはCチームでゴールを実行するインセンティブをほとんど持っていませんでした。

同じ行数ではないので、それは1つの選択ではないと思います。
直接対決は別の選択である必要があります。それらは小さなテーブルです。これはAccessで行うことができます。

2ウェイ以上のタイがある場合、直接対決はより複雑になる可能性があります。ゲームの総数が同じでない限り、シーズンを終了しないことで、ゲームの総数が等しくなることを保証できます。各チームが別のチームと同じ回数プレイすることを確認する場合、リーグサイズは2の累乗(例:16)である必要があります。また、チームが撤退したり、停止されたりする可能性を考慮する必要があります。対称的なスケジュールを保証することはほとんど不可能なので、それに対処しようとするランキングが必要です。3方向のタイでは、2つを分割し、3つ目を両方をタイにすることができます。その状況では、その分割された2つはより多くの勝利1を持ちますが、2つのタイで3番目よりも上位にランク付けされるべきではありません。だから私は+1勝0タイ-1敗のタイブレーカーポイントシステムで2を修正します。そして、他の可能性のある非対称性に対処するために、私は3を修正して直接のゴール差の合計にします。そして、それらの行では、4と5の合計ゴール差を使用します。

于 2012-04-06T13:38:13.297 に答える