0

我正在尝试创建一个 SQL 查询,该查询将返回至少有 2 个粉丝的非队长球员的姓名。

我的难点在于,球迷被分成了最喜欢的球队和最喜欢的球员,所以我必须把最喜欢的球员作为一个团队和个人来计算。

这是我想出的,但它没有返回正确的记录:

select players.name
from players
-- join relevant relations
join teams
on teams.name = players.team
join favplayers
on players.name = favplayers.player
join favteams
on players.team = favteams.team
-- conditions
where players.team <> teams.captain
group by players.name
having (count(favplayers.player) + count(favteams.team)) > 1;

以下是供参考的关系模型:

在此处输入图像描述

有任何想法吗?

输出:

NAME             COUNT(DISTINCTFAVPLAYERS.FAN) COUNT(DISTINCTFAVTEAMS.FAN)
-------------------- ----------------------------- ---------------------------
Arthurs                      3               1
Becker                       1               1
Bryan                        0               3
Greul                        0               2
4

1 回答 1

2

由于最喜欢的玩家可能是没人喜欢的团队成员(反之亦然),因此“最喜欢”表的连接需要是外部连接。此外,非队长条件应该是球员的名字,而不是球队的名字:

select players.name
from players
-- join relevant relations
join teams
on teams.name = players.team
left join favplayers
on players.name = favplayers.player
left join favteams
on players.team = favteams.team
-- conditions
where players.name <> teams.captain -- not players.team
group by players.name
having (count(favplayers.player) + count(favteams.team)) > 1;

这应该正确地返回多次“收藏”的球员,但如果您想计算一名球员被“收藏”的次数,则having表达式会在球员和球员都有多个粉丝的情况下被高估球员的球队 - 更好的表达方式是count(distinct favplayers.fan) + count(distinct favteams.fan)。还要注意,它会包括单个粉丝“收藏”了该球员和他们的球队的球员。

于 2013-05-08T09:49:17.213 回答