我们说我有一个数据库,我正在跟踪几个足球联赛的统计数据。我的表格和相关栏目如下。
联赛:id 球队:id,league_id 玩家:id,team_id 目标:id,player_id,num_goals
如您所见,这实际上是一系列hasManyThrough关系。一个联盟通过球队有很多球员。一支球队通过球员有很多目标。等等。我正在编写一个查询,按联赛总计目标数量。到目前为止,我的最大努力是这样的:
select('id', 'name') from leagues,
join teams where ('teams.id' = 'leagues.id'),
join players where ('players.id' = 'teams.id'),
join goals where ('goals.id' = 'players.id'),
sum('goals.num_goals');
该查询的目标是返回联盟ID,联赛名称以及该联盟中球员得分的数量。
答案 0 :(得分:1)
你的联接是好的,问题在于你如何做总和。
Sum语句应该在select
语句中,最好带有group by
语句。你也不应该用'符号
select leagues.id, leagues.name, sum(goals.num_goals) from leagues
join teams on teams.id = leagues.id
join players on players.id = teams.id
join goals on goals.id = players.id
group by leagues.id, leagues.name;