我是SQL的新手,我在这种情况下遇到了困难。
表1包含玩家在团队中的信息。
Table1
playerID | yearID
----------------------
Player1 | 2000
Player1 | 2001
Player2 | 2000
表2包含名人堂的选票信息。玩家可以多次参加。
playerID | BallotYear | Inducted
---------------------------------
Player1 | 2010 | N
Player1 | 2011 | N
Player2 | 2010 | Y
我试图计算玩家在Table1上出现的次数,条件是他们从未根据Table2进行过导入。
Desired Result
playerID | Count on Table 1
---------------------------
Player1 | 2
我遇到的问题是Player1返回4而不是2.我已经研究了许多不同的函数,但我仍然得到相同的结果。这就是我想出来的。
select Table1.playerID, count(Table1.playerID)
from Table1
join Table2 on Table1.playerID = Table2.playerID
where Table2.inducted = 'N'
group by Table1.playerID;
答案 0 :(得分:2)
如果我理解正确,您希望过滤掉'Y'
字段中曾有inducted
的玩家。如果是这样的话:
select t1.playerId, count(*)
from table1 t1
where not exists (select 1
from table2 t2
where t2.playerID = t1.playerID and t2.inducted = 'Y'
)
group by t1.playerId;
答案 1 :(得分:0)
您可以使用左连接来实现此目的,这也将增加查询性能
select t1.playerId, count(*)
from table1 t1 left join
(select distinct playerID
from table2
where inducted = 'Y'
) t2 on t1.playerID = t2.playerID
where t2.playerId is null
group by t1.playerId