SQL:从结果页面计算球队的比赛次数

2025-10-06 22:41:23

对于您所展示的这个简单的案例,只有几个地方是您应该修复的。对于您所显示的问题,再一次。

First:更改表的列类型matches它不应该是SERIAL,因为它是一个自动增量类型的列(不是真实类型)。这两列都是foreign keys,并且应该是integer、int或bigint

作为

代码语言:javascript运行复制create table matches (

winner bigint,

loser bigint,

gamepoints int,

constraint fk_player_winner foreign key (winner)

references players(id),

constraint fk_player_loser foreign key (loser)

references players(id)

);Second:要知道玩家玩了多少场游戏,您可以创建两个子查询,一个包含赢家,另一个包含输家,并将这两个子查询的值相加。问题是你必须减少两个游戏点:

代码语言:javascript运行复制select w.id, w.name, w.gp-l.gp as gamepoints, w.ng+l.ng

from (select p.id, p.name, sum(m.gamepoints) gp, count(m.winner) as ng

from players p inner join matches m

on p.id=m.winner

group by p.id, p.name ) w

INNER JOIN

(select p.id, p.name, sum(m.gamepoints) gp, count(m.loser) as ng

from players p inner join matches m

on p.id=m.loser

group by p.id, p.name) l on w.id=l.id;从它你创建你的视图。

注意:也许我在这两个子查询上做的有点过头了。可以使用两个players表和一个matches之间的连接

看看它是如何在小提琴上进行的:http://sqlfiddle.com/#!15/5b6a4/4