- ベストアンサー
PHPとMySQLでデータサイトを作成する際の質問
- データサイトを作成する際に、得点数の多いチームを並べる方法と、対戦相手ごとの勝率を計算する方法について質問です。
- 得点数の多いチームを表示する方法として、ホームゲームとビジターゲームでのスコアを区別して適用するコードを紹介してください。
- 対戦相手ごとの勝率を計算する方法についても教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
自分目線であればそんな感じの管理なんでしょうね さて命題の件は //仮データ create table game(issue varchar(10),h_a varchar(10),h_score int,a_score int,opponent varchar(20)); insert into game values( '●','H','8','9','チームB'),( '○','A','2','8','チームC'),( '●','H','4','9','チームD'),( '○','A','3','4','チームB'),( '●','H','0','1','チームB'),( '△','A','3','3','チームC'),( '△','H','1','1','チームE'); として(集計結果をみるためすこしデータいじってます) (1) select (h_a='H')*h_score + (h_a='A')*a_score as score ,issue,opponent from game order by score desc; (2) select opponent,coalesce(sum(issue='○')/(sum(issue='○')+sum(issue='●')),0) as ratio from game group by opponent order by ratio desc; となります。ポイントは >勝率は「勝った試合数÷(勝った試合数+負けた試合数)*100」 とする場合、引き分けしかない相手をどうするかですね いわゆる勝ち点方式のように引き分けも評価対象にしないと 引き分けが多いチームとの力関係が相対評価できないと思います 今回はcoalesce関数で引き分けだけの関係は負けと同等としています また、自分がホームかアウェーかわかっていてそれぞれの点数がわかっているので issueとダブルバインドしている点が気になります。 最初の書き込みでうっかり間違えたとおり、issueによる勝ち負けと 点数によって勝ち負け判断の整合性があわなくなる場合もあり、 何をもって勝ち負けをジャッジするか決めておかないと計算があわなくなります。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
データ管理が微妙なんですが これは自分のチームが対戦した結果だけ保存していけばいいという仕様ですか? たとえばチームBとチームCが対戦した結果などはどうでもいい?
お礼
yambejpさん 回答ありがとうございます。 申し訳ありません、私の説明不足でした。 自分のチーム(チームA)視点でデータを格納しています。 なので仰る通りチームBとチームCの対戦結果などは除外しています。 あと一点。質問を書き込んでから気付いたのですが、データの最後は引き分けですね。 ○|A|3|3|チームB ↓ △|A|3|3|チームB よろしくお願いします。
- t_ohta
- ベストアンサー率38% (5241/13712)
一点目はこんな感じ。 SELECT *, CASE h_a WHEN 'H' THEN h_score ELSE a_score END AS score FROM game ORDER BY score DESC LIMIT 10;
お礼
t_ohtaさん 回答ありがとうございます。 先ほどご教示頂いたコードで試したら無事できました。 助かりました。ありがとうございます。 やはり二点目はSQL文でどうこうできる問題ではないのでしょうか? 詳しい方に無理だと言われれば諦めつくのですが。 よろしくお願いします。
お礼
yambejpさん 再度回答ありがとうございます。 ご教示頂いたコードで実行したら無事理想通りの結果が表示されました。ありがとうございます。 勝率についてはSQL文では不可能かなと思っていたので驚きました。 >とする場合、引き分けしかない相手をどうするかですね ここまで深く考えていませんでした。 どのようにするか少し考えてみます。 >また、自分がホームかアウェーかわかっていてそれぞれの点数がわかっているので issueとダブルバインドしている点が気になります。 そうですね。issueは時折まとめてチェックはしているもの間違いも多々あります。 こちらについてももう少し考えてみます。 とても勉強になりました。 ありがとうございました。