Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql多对多与计数和数学_Sql_Mysql - Fatal编程技术网

Mysql多对多与计数和数学

Mysql多对多与计数和数学,sql,mysql,Sql,Mysql,我在mysql数据库中设置了多对多表。球队可以参加许多比赛,每场比赛有2支球队。在他们之间有一张桌子,叫做团队游戏 我想做的是为每支球队创建统计数据。理想的打印输出是: 球队id、球队名称、胜利、失败、平局、错误 我的问题是把哪支球队是主队还是客队的数学联系起来,如果他们赢了,就把他们数起来。然后,我必须计算每支球队的客场和获胜次数。最后把所有的东西连接起来。下面是我当前的查询结构(无法正常工作)以及创建表信息。有什么想法吗 选择t.*,将(g_wins.home_score>g_wins.A

我在mysql数据库中设置了多对多表。球队可以参加许多比赛,每场比赛有2支球队。在他们之间有一张桌子,叫做团队游戏

我想做的是为每支球队创建统计数据。理想的打印输出是:

球队id、球队名称、胜利、失败、平局、错误

我的问题是把哪支球队是主队还是客队的数学联系起来,如果他们赢了,就把他们数起来。然后,我必须计算每支球队的客场和获胜次数。最后把所有的东西连接起来。下面是我当前的查询结构(无法正常工作)以及创建表信息。有什么想法吗


选择t.*,将(g_wins.home_score>g_wins.ABLE_score)计算为赢,
将(g_获胜。主场得分


表创建表

 teams  CREATE TABLE `teams` (
 `tid` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(60) NOT NULL,
`league` varchar(2) NOT NULL,
`active` tinyint(1) NOT NULL,
PRIMARY KEY (`tid`)
)


创建表格
teams\u游戏
(

)


创建表格
游戏
(

)

你让事情复杂化了:这应该是一种2-n而不是n-m关系。 摆脱
团队\u游戏
表格,在游戏表格中创建两个字段,例如:
主场\u tid
客场\u tid

编辑:然后查询类似:

select t.tid, t.name, 
       sum(g.home_score < g.away_score xor t.tid = g.home_tid) wins, 
       sum(g.home_score > g.away_score xor t.tid = g.home_tid) losses, 
       sum(g.home_score = g.away_score) draws
  from games g
       join teams t on t.tid = g.home_tid or t.tid = g.away_tid
 group by t.tid
选择t.tid,t.name,
总和(主场得分<客场得分xor t.tid=主场得分)获胜,
总损失(主场得分>客场得分xor t.tid=主场得分),
总和(主场得分=客场得分)抽签
来自游戏g
在t.tid=g.home\U tid或t.tid=g.WAY\U tid上加入团队
按工贸署分组
所以答案是使用sum,否则它会计算输出中的真值和假值,这是连接产生的行总数

EDIT2

select t.tid, t.name, 
       sum(g.home_score < g.away_score xor tg.homeoraway) wins, 
       sum(g.home_score > g.away_score xor tg.homeoraway) losses, 
       sum(g.home_score = g.away_score) draws
  from games g
  join team_games tg on tg.gid = g.gid
  join teams t on t.tid = tg.tid
 group by t.tid
选择t.tid,t.name,
总得分(主场得分<客场得分或主场得分)获胜,
总损失(主场得分>客场得分或主场得分),
总和(主场得分=客场得分)抽签
来自游戏g
在tg.gid=g.gid上加入团队
在t.tid=tg.tid上加入t组
按工贸署分组

你能改变你的数据结构吗?确实,不要解决一个可以简化的问题。简化它。也许,开发者想考虑多个团队匹配的可能性(那些是有意义的吗?).他在游戏表中已经有了
主客场得分
客场得分
。-是的,我同意这比需要的更复杂,因为它不是n-m关系。但是,由于已经建立和填充了表以及其他与DB交互的代码,我希望有一种方法可以在当前设置中做到这一点。我会的未来可能会更改表格,但由于这是实时的,我现在不想更改。
select t.tid, t.name, 
       sum(g.home_score < g.away_score xor t.tid = g.home_tid) wins, 
       sum(g.home_score > g.away_score xor t.tid = g.home_tid) losses, 
       sum(g.home_score = g.away_score) draws
  from games g
       join teams t on t.tid = g.home_tid or t.tid = g.away_tid
 group by t.tid
select t.tid, t.name, 
       sum(g.home_score < g.away_score xor tg.homeoraway) wins, 
       sum(g.home_score > g.away_score xor tg.homeoraway) losses, 
       sum(g.home_score = g.away_score) draws
  from games g
  join team_games tg on tg.gid = g.gid
  join teams t on t.tid = tg.tid
 group by t.tid