所以我有一张有吃水历史记录的表格。称之为“草案结果”。
team_id pick_number round position playerID
0002 01 01 WR 12
0002 01 02 QB 09
0002 01 03 TE 32
0002 01 04 RB 23
0034 02 01 WR 43
0034 02 02 WR 24
0034 02 03 QB 04
0034 02 04 QB 11
只有每个队友都有20轮的选秀权。我有大约7000个team_ids。我想总计每个团队采用他们的第一个qb的哪一轮,我需要帮助找出一个SQL查询来完成它。
SELECT "Round", COUNT("Team_Id") FROM public."Draft Results"
WHERE "Position" = 'QB'
GROUP BY "Round"
ORDER BY "Round" asc
有5个不同的位置:'QB','RB','WR','TE','D'
在这个例子中,我希望查询显示这里是1队,第2轮选中了第一个qb,1队是第3轮选中了第1个QB。目前,我的查询将显示我提到的内容,并且1队在第4轮中选择了QB。即使这不是第一个QB选择的球队(他们已经在第三个选中了一个)
答案 0 :(得分:1)
不是简单的聚合min
:
select team_id,
min(round) as round
from "Draft Results"
where position = 'QB'
group by team_id;
答案 1 :(得分:1)
也许在" Round"上尝试MIN()聚合函数。专栏
SELECT MIN("Round"), COUNT("Team_Id") FROM public."Draft Results"
WHERE "Position" = 'QB'
GROUP BY "Round"
ORDER BY "Round" asc
然后这将获得" Round"的最小值。列将是第一个或最低的一轮'该职位将是QB'。在您的示例中,team_id 0034选择了一个' QB'在第03轮和第04轮中,但选择这两个的MIN()值将选择第一个实例或最低轮数,他们选择了QB'其中将是第3轮。我希望这会有所帮助,并且我理解你要完成的任务。
答案 2 :(得分:0)
如果你想看到整个表,但是由于最早的循环逻辑而限制你想要返回的行,我会用这个:
SELECT *
FROM draft_results d
INNER JOIN (
SELECT team_id, MIN(round_id) minRndQBPicked
FROM draft_results d
WHERE position = 'QB'
GROUP BY team_id
) minRnd ON d.team_id = minRnd.team_id AND d.round_id = minRnd.round_id