>我有一个四分卫统计数据表。表中的每一行代表一个 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
这两者都返回数据中显示的三列的所有唯一组合。