PHPとMySQLでデータサイトを作成しています。
詳しい方に二点ほどお聞きしたいのですが。
テーブルは下記の通りです。データベース名はgame。
フィールドについて「issue」は結果。「h_a」はホームかビジターか。「h_score」はホーム側スコア。「a_score」はビジター側スコア。「opponent」は対戦相手です。
テーブル名:game
issue(VARCHAR型)|h_a(VARCHAR型)|h_score(INT型)|a_score(INT型)|opponent(VARCHAR型)
●|H|8|9|チームB
○|A|2|8|チームC
●|H|4|9|チームD
○|A|3|3|チームB
一点目。
格納したデータから自分のチームのスコアが多い順に10ほど並べたいと思っています。
問題はホームゲーム時(H)の場合はホーム側スコア(h_score)、ビジター(A)の時はビジター側スコア(a_score)を適用することです。
現在は下記のようなコードしか記述していません。
$stmt = $dbh -> query("SELECT * FROM game ORDER BY () DESC LIMIT 10");
二点目。
対戦相手ごとに勝率を計算し、勝率が高い順から10ほど並べることは可能でしょうか?
勝率は「勝った試合数÷(勝った試合数+負けた試合数)*100」で計算。
上のデータでいうと、下記の順番です。
1 勝率100% チームC
2 勝率50% チームB
3 勝率0% チームD
こちらは不可能でしたら構いません。
ご存知の方いらっしゃいましたらご教示ください。
よろしくお願いします。
No.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による勝ち負けと
点数によって勝ち負け判断の整合性があわなくなる場合もあり、
何をもって勝ち負けをジャッジするか決めておかないと計算があわなくなります。
yambejpさん
再度回答ありがとうございます。
ご教示頂いたコードで実行したら無事理想通りの結果が表示されました。ありがとうございます。
勝率についてはSQL文では不可能かなと思っていたので驚きました。
>とする場合、引き分けしかない相手をどうするかですね
ここまで深く考えていませんでした。
どのようにするか少し考えてみます。
>また、自分がホームかアウェーかわかっていてそれぞれの点数がわかっているので
issueとダブルバインドしている点が気になります。
そうですね。issueは時折まとめてチェックはしているもの間違いも多々あります。
こちらについてももう少し考えてみます。
とても勉強になりました。
ありがとうございました。
No.2
- 回答日時:
データ管理が微妙なんですが
これは自分のチームが対戦した結果だけ保存していけばいいという仕様ですか?
たとえばチームBとチームCが対戦した結果などはどうでもいい?
yambejpさん
回答ありがとうございます。
申し訳ありません、私の説明不足でした。
自分のチーム(チームA)視点でデータを格納しています。
なので仰る通りチームBとチームCの対戦結果などは除外しています。
あと一点。質問を書き込んでから気付いたのですが、データの最後は引き分けですね。
○|A|3|3|チームB
↓
△|A|3|3|チームB
よろしくお願いします。
No.1
- 回答日時:
一点目はこんな感じ。
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文でどうこうできる問題ではないのでしょうか?
詳しい方に無理だと言われれば諦めつくのですが。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python コードについて(初学者です) 3 2023/07/20 14:44
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- 統計学 この問題良く分からなくて分かる方解説お願いします。 ある有名ラーメン店の待ち時間 X (分) を調べ 5 2022/07/20 09:57
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- 野球 野球のXについて 2 2022/11/20 19:16
- 野球 セ・リーグの今年の3位争いはどうなる? 5 2022/09/26 07:05
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
- PHP PHP MySql ページング 2 2022/09/20 06:38
- 数学 数学の文章問題を教えて欲しいです。 問題 A〜Eの5チームが野球の総当り戦を行った。現在の進行状況は 4 2023/04/18 21:27
- 数学 試合数を教えてください。 10 2023/06/04 23:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
Oracleで上書きImportはできま...
-
アクセス レコードセットを更...
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
accessでレコード更新直後の反...
-
「クリップボードにコピーされ...
-
ACCESS2000でのリンクテーブル...
-
ORA-01401が表示され、データが...
-
MySQLやSQliteの中のデータ検索...
-
MYSQLでコード番号を自動でつけ...
-
マテリアライズドビューとスナ...
-
EXCELデータからACCESSデータの...
-
PostgreSQLのパフォーマンスに...
-
Access昇順レコードを、5分割...
-
sqlにおけるテーブル名と各カラ...
-
Accessの処理速度を速めるため...
-
削除したテーブルを元に戻すこ...
-
SQL:複数行のデータを一つの文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
Oracleで上書きImportはできま...
-
accessでレコード更新直後の反...
-
このISAMでは、リンクテーブル・・
-
マテリアライズドビューとスナ...
-
アクセス レコードセットを更...
-
同一テーブルのデータを参照し...
-
htmlコードで書かれた表にphpで...
-
結合テーブルでINSERTする方法...
-
ACCESSで容量が50MBになった...
-
ERROR1062:Duplicate entry.......
-
Accessでの稼働日数計算の方法
-
削除したテーブルを元に戻すこ...
-
重複クエリを使ったデータ削除
-
Accessのインポートについて(上...
-
処理の途中で停止させ、再開さ...
-
住所のDBテーブル、マスターの...
おすすめ情報