SQL 选择,其中一个子句从属于另一个子句



>我有一个四分卫统计数据表。表中的每一行代表一个 QB 在一场比赛中的表现。每行的唯一 ID 称为 gameId,由玩家的 ID 和游戏日期组成。

我想做的是使用 select 语句生成表中所有唯一四分卫的列表,这些四分卫至少投出了一个完成。

我正在尝试使用此语句来做到这一点:

SELECT * FROM swdata
WHERE gameComp > 0 AND gameId IN (
   SELECT MAX(gameId) FROM swdata GROUP BY playerId)
ORDER BY playerLastName

第一个子句是gameComp> 0,第二个子句是将列表筛选为唯一的四分卫。

我想发生的是运行第一个子句,然后在第一个子句的结果上运行第二个子句。

但实际发生的是它们同时运行,这导致一些玩家被省略在结果中。

所以,我知道我的结构错了。谁能帮我做对?

如果你想要唯一的玩家ID,下面这些不是可以吗?

select distinct playerId
from swdata
where gamecomp > 0

如果需要多个列,请使用如下查询联接回原始表:

select s.*
from swdata s join
     (select playerId, max(gameId) as maxgameId
      from swdata
      group by playerId
     ) m
     on s.gameId = maxgameId

这是为了回答您关于distinct的问题。 非重复返回 select 子句中所有内容的不同值。 因此,以下内容是等效的:

select distinct playerID, playerLastName, playerFirstName
from swdata

select playerID, playerLastName, playerFirstName
from swdata
group by playerID, playerLastName, playerFirstName

这两者都返回数据中显示的三列的所有唯一组合。

最新更新