【问题标题】:how to calculate head to head stats using mysql如何使用mysql计算头对头统计数据
【发布时间】:2017-05-08 04:12:45
【问题描述】:

我正在尝试计算两支球队互相比赛时的头对头数据。 Team1 可以在整个赛季中多次与 Team2 交手。每次有头对头比赛(比赛)时,我都会在头对头表​​中记录结果。下面是我保存数据的表模式:

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'match up id',
`team1_id` int(11) DEFAULT NULL COMMENT 'id of team1',
`team2_id` int(11) DEFAULT NULL COMMENT 'id of team2',
`winner` int(11) DEFAULT NULL COMMENT 'winner(team ID) of this head to head',
`dateplayed` date DEFAULT NULL COMMENT 'date played',
`tournament_id` int(11) DEFAULT NULL COMMENT 'tournament name',

我的目标是能够计算出 team1(team1_id) 对 team2(team2_id) 的胜利次数。 我现在使用的查询是:

SELECT  count(winner)as wins, te.id FROM head_to_head hh
    LEFT JOIN teams te ON
    hh.winner = te.id
    WHERE hh.team1_id ='225' AND
    hh.team2_id ='4'
    group by te.id
    order by count(winner)

如果我使用上面的查询,我只会得到 hh.team2_id('4') 的“胜利”。如果他们在赛季中每 5 次交手,我希望能够计算出 team1 赢了 'x' 次和 team2 赢了 'x' 次。所以最终结果应该是这样的: --假设他们在赛季中交手 5 次。

[team_id] [Wins]
   225      3
    4       2

非常感谢任何帮助。 谢谢。

【问题讨论】:

  • 那么,你需要select winner, count(*) from head_to_head group by winner;
  • 谢谢 Gurwinder。这似乎工作正常。我需要一点补充。其中一个团队没有任何胜利,我如何将计数以及与之关联的 teamID 设置为零。谢谢。
  • 我知道这不是你的问题,但我之前已经建立过这样的表格,我建议让这个长期变得更容易,将竞争对手规范化到一个单独的表格中。您的父表有比赛信息,参与者表有比赛和球队的外键,您有一个指示输赢的列,如果它是一个因素,您可以有一个主/客列,以及其他参与者特定的列你想要的数据。我发现以这种方式编写查询要容易得多

标签: mysql sql count


【解决方案1】:
select 
  t.id team_id,
  count(h.winner) wins
from teams t
  left outer join
head_to_head h
  on t.id = h.winner
  and h.team1_id ='225'
  and h.team2_id ='4'
group by t.id;

【讨论】:

  • 它在 (h.*) 中抱怨。错误 1064。
  • @user1960170 立即尝试
  • 它有效,但它显示了我团队表中所有团队的行。我怎样才能只显示两行(对于 team_ID 225 和 4)。
  • 我添加了 WHERE 条件并得到了我想要的东西。感谢您的帮助。接受你的回答。
  • 抱歉最后一条评论。如果球队 2 没有赢得任何比赛,我如何在结果中显示球队 1 和球队 2 的总胜数显示 0(零)胜
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多