我有一个简化的数据示例:
足球队 | 玩家 | 目标 |
---|---|---|
伙计。城市 | 哈兰德 | 3 |
伙计。城市 | 德布劳内 | 0 |
伙计。城市 | 福登 | 0 |
伙计。联队 | 霍伊隆德 | 0 |
伙计。联队 | 奥纳纳 | 0 |
伙计。联队 | 马奎尔 | 0 |
现在我想添加一个列来检查球队是否有进球者。 所以我的结果应该是:
足球队 | 玩家 | 目标 | 团队目标 |
---|---|---|---|
伙计。城市 | 哈兰德 | 3 | y |
伙计。城市 | 德布劳内 | 0 | y |
伙计。城市 | 福登 | 0 | y |
伙计。联队 | 霍伊隆德 | 0 | n |
伙计。联队 | 奥纳纳 | 0 | n |
伙计。联队 | 马奎尔 | 0 | n |
我怎样才能实现这个目标?我应该使用哪个 SQL 语句。 请记住,我还有 25 个其他专栏。我是否仍然应该将其放入聚合函数中并按所有其他列进行分组,还是有更简单的方法?
您可以将
SUM()
与 CASE
语句一起使用。
SELECT SoccerTeam, Player, Goals,
CASE WHEN SUM(Goals) OVER (PARTITION BY SoccerTeam) > 0 THEN 'y' ELSE 'n' END AS GoalsInTeam
FROM YourTable;
为此,您可以在 CASE 表达式内使用窗口函数。我在查询中添加了 * ,因为您说您还有很多其他列。您应该将星号替换为查询中所需的列列表。如果您愿意,您还可以在“goals_in_team”列之后放置列。
SELECT *, --replace with your list of columns in preferred order
CASE
WHEN SUM(goals) OVER (PARTITION BY soccer_team) > 0
THEN 'y'
ELSE 'n'
END AS goals_in_team
FROM results;