SQL-需要有条件地对一列进行求和

时间:2016-10-21 15:59:41

标签: sql

|  PlayID |  Passing_Yards |  Receptions |  Position |  Player_Name  | Rec_Yds
------------------------------------------------------------------------------
|  1234   |  0             |  1          |  WR       |  Bill Schmill | ???
------------------------------------------------------------------------------
|  1234   |  20            |  0          |  QB       |  Joe Schmoe   | ???
------------------------------------------------------------------------------

我正在使用NFL SQL数据库来尝试计算玩家基于特定“游戏ID”号码的接收码数。没有用于“接收码”的列,因此我需要根据同一个游戏中的“传球码”(使用游戏ID)推导出该列。如何为“接收码”创建一个新列,该列将根据该游戏的“游戏ID”和“传球码”进行计算?基本上,接收将需要等于1播放,我认为你需要根据播放ID加总?

类似的东西:

SELECT PlayID, Passing_Yards, Receptions, Position, Player_Name, Sum(Passing_Yards)
FROM nfldb
GROUP BY PlayID, Passing_Yards, Receptions, Position, Player_Name

但这并不能满足我的需要。

1 个答案:

答案 0 :(得分:1)

我认为窗口功能会做你想要的:

select n.*,
       (case when reception = 1
             then max(passing_yards) over (partition by playid)
             else 0
        end) as receiving_yards
from nfldb n;

max()over的使用是ANSI标准语法,大多数数据库都支持这种语法。