Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
Sql 查找两个不同关系的count()之和至少为2的记录_Sql - Fatal编程技术网

Sql 查找两个不同关系的count()之和至少为2的记录

Sql 查找两个不同关系的count()之和至少为2的记录,sql,Sql,我正在尝试创建一个SQL查询,该查询将返回至少有2名球迷的非队长球员的姓名 我的困难在于球迷们被分成了最受欢迎的球队和最受欢迎的球员,所以我必须把最受欢迎的球员作为一个团队和个人来计算 下面是我的想法,但它没有返回正确的记录: select players.name from players -- join relevant relations join teams on teams.name = players.team join favplayers on players.name = fa

我正在尝试创建一个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;

因为有可能会有最喜欢的球员,他们是没有人喜欢的球队的成员,反之亦然,所以最喜欢的表格的连接需要是外部连接。此外,非队长条件应以球员的名字而不是球队的名字为准:

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;

这应该正确地返回多次被偏爱的玩家,尽管如果您想包括一个玩家被偏爱次数的计数,如果球员和球员所在的球队都有多个球迷,则have表达式会计算过多-更好的表达式是countdistinct favplayers.fan+countdistinct favteams.fan。还要注意的是,这将包括一个球迷同时偏爱球员和球队的球员。

感谢您指出队长条件错误。我第一次写对了,但重写时却犯了错误。另外,是的,我确实考虑了FaveStudio和FaveStand的潜在双重计数,但没有提到,因为我已经知道记录中没有重叠,但是我想知道怎么做。谢谢你也展示了这一点。我只是试着将它改为计数distinct favplayers.fan+countdistinct favteams.fan只是想看看我是否得到相同的结果,但它切断了两条绝对应该包含的记录。有什么想法吗?你能把问题编辑成包含一些样本数据吗?或者,如果您保留现有条件,但将countdistinct值添加到select子句中,您会看到这两个玩家的结果是什么?好的,尝试将countdistinct favplayers.fan+countdistinct favteams.fan添加到select子句中-新列的结果应为4,2,3,2。如果是,请将having子句更改为having countdistinct favplayers.fan+countdistinct favteams.fan>1-这应该是您使用的条件。你没有单独评估,是吗?谢谢,现在都修好了。当您最初发布distinct更新时,我认为您只添加了distinct,没有注意到favplayers/favteam的.fan列中的更改。
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;