SQLの知識を超えてデータベースを正規化したと思います。:)これが私のスヌーカーリーグのウェブアプリから苦労しているクエリです。これは、すべてのシーズンのチームのハイブレイクの全体的な統計を計算します。サンプルのチームID3では。
max(break_score)maxBreak、avg(break_score)avgBreak、を選択します count(break_score)breaks 休憩から match_id=break_matchで試合に参加する ここでbreak_playerin( 個別のplayer_idを選択します プレイヤーから player=player_idおよびteam=3でteam_membersに参加します) および(match_hometeam=3またはmatch_awayteam=3)
テーブル:
- 一致:
match_id int(11)auto_increment match_hometeam int(11) match_awayteam int(11) match_date date match_void tinyint(4) match_status tinyint(4) match_homescore tinyint(4) match_awayscore tinyint(4) match_league int(11)
- 休憩:
break_id int(11)auto_increment break_match int(11)match_idへの外部キー break_player int(11) break_score tinyint(4) break_clearance tinyint(4) break_year int(11)
- team_members:多対多のテーブル。
team int(11)チームテーブルへの外部キー player int(11)プレーヤーテーブルへの外部キー year int(11)プレーヤーがチームでプレイした年
上記のクエリは、1つの問題を除けば、ほぼ意図したとおりに機能します。プレーヤーが複数のチームでプレーした場合、すべてのチームで彼が持っている休憩がこれらの統計に含まれます。
Breaksテーブルに追加のフィールド「break_team」がある場合、クエリは簡単です。だから私の質問は2つあります、誰かが正しいクエリを支援できますか、それともこれらの統計を支援するために正規化を少し減らす必要がありますか?非正規化する時期はいつですか?