0

我有一个四分卫统计表。表中的每一行代表一个 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,第二个子句是从列表中筛选出独特的四分卫。

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

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

所以,我知道我的结构是错误的。任何人都可以帮我做对吗?

4

1 回答 1

2

如果您想要唯一的 playerIds,以下方法不起作用吗?

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. distinct 返回 select 子句中所有内容的不同值。因此,以下是等价的:

select distinct playerID, playerLastName, playerFirstName
from swdata

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

这两个都返回数据中出现的三列的所有唯一组合。

于 2012-10-08T01:07:03.583 回答