有没有办法在PostgreSQL中进行“情境式”联接?

时间:2019-07-15 13:10:43

标签: postgresql

我正在尝试使用SQL来确定球队在NCAA锦标赛中走的距离。我有一个包含3个表的数据库。一张桌子列出每场比赛的结果,一张桌子列出各队,而一张桌子则根据比赛的日数进行比赛。以下是在3张桌子上继续前进的结果: 结果表:

  Season DayNum WTeamID WScore LTeamID LScore WLoc  NumOT
   <dbl>  <dbl>   <dbl>  <dbl>   <dbl>  <dbl> <chr> <dbl>
1   1985    136    1116     63    1234     54 N         0
2   1985    136    1120     59    1345     58 N         0
3   1985    136    1207     68    1250     43 N         0
4   1985    136    1229     58    1425     55 N         0
5   1985    136    1242     49    1325     38 N         0
6   1985    136    1246     66    1449     58 N         0

Teams Table:
  TeamID TeamName    FirstD1Season LastD1Season
   <dbl> <chr>               <dbl>        <dbl>
1   1101 Abilene Chr          2014         2019
2   1102 Air Force            1985         2019
3   1103 Akron                1985         2019
4   1104 Alabama              1985         2019
5   1105 Alabama A&M          2000         2019
6   1106 Alabama St           1985         2019

Rounds Table:
 daynum        round
1    134 Play-in Game
2    135 Play-in Game
3    136  Round of 64
4    137  Round of 64
5    138  Round of 32
6    139  Round of 32

使用以下代码,除了一个团队之外,它对所有团队都很有用。

    SELECT a.season, b.teamname, c.round
    FROM ncaatourney AS a
    JOIN teams AS b
    ON a.lteamid = b.teamid
    JOIN rounds AS c
    ON a.daynum = c.daynum

这给了我以下结果:

 season   teamname       round
1   1985       Iowa Round of 64
2   1985     Purdue Round of 64
3   1985     Lehigh Round of 64
4   1985        USC Round of 64
5   1985       Ohio Round of 64
6   1985 Washington Round of 64

问题在于,当团队的ID显示为lteamid时,就会用到它,这意味着我最终并没有获得冠军。有没有一种方法可以编写CASE语句或IF / ELSE,以便在daynum = 154(冠军赛的当天)出现在wteamid列中但执行上述操作时,如果一个队友出现在回合中,则会给我“冠军”否则加入吗?还是有其他方法可以进行加入?

0 个答案:

没有答案