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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カラム名を取得
-
ACCESSで容量が50MBになった...
-
オラクルのエクスポートについて
-
htmlコードで書かれた表にphpで...
-
テーブルで一番古いレコードだ...
-
MySQLのDB内容をWEB上に表示す...
-
「クリップボードにコピーされ...
-
このISAMでは、リンクテーブル・・
-
重複クエリを使ったデータ削除
-
クエリとパススルークエリを作...
-
MySQLの容量の削減の仕方
-
仕事のミス:本番データの削除→...
-
left joinなどで結合対象のレコ...
-
MySQLである項目の値の種類を求...
-
sql serverのテーブルレイアウ...
-
男性と2人で飲食店に行きテーブ...
-
お金持ちのテーブル
-
件数とデータを同時に取得する...
-
MACアドレス見えない
-
「テーブルに座って……」という...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
Oracleで上書きImportはできま...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
ビューのソートについて
-
マテリアライズドビューとスナ...
-
処理の途中で停止させ、再開さ...
-
MS Accessを共有した際にファイ...
-
構文エラー : 演算子がありませ...
-
ORA-01401が表示され、データが...
-
accessでレコード更新直後の反...
-
重複クエリを使ったデータ削除
-
Accessでの稼働日数計算の方法
-
住所のDBテーブル、マスターの...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
ACCESSで容量が50MBになった...
-
複数のテーブルを参照するselec...
おすすめ情報