幻想足球数据postgre sql获取第一个实例

时间:2017-04-03 18:07:58

标签: sql postgresql

所以我有一张有吃水历史记录的表格。称之为“草案结果”。

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选择的球队(他们已经在第三个选中了一个)

3 个答案:

答案 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