如何聚合在一张表中

问题描述 投票:0回答:2

我有一个简化的数据示例:

足球队 玩家 目标
伙计。城市 哈兰德 3
伙计。城市 德布劳内 0
伙计。城市 福登 0
伙计。联队 霍伊隆德 0
伙计。联队 奥纳纳 0
伙计。联队 马奎尔 0

现在我想添加一个列来检查球队是否有进球者。 所以我的结果应该是:

足球队 玩家 目标 团队目标
伙计。城市 哈兰德 3 y
伙计。城市 德布劳内 0 y
伙计。城市 福登 0 y
伙计。联队 霍伊隆德 0 n
伙计。联队 奥纳纳 0 n
伙计。联队 马奎尔 0 n

我怎样才能实现这个目标?我应该使用哪个 SQL 语句。 请记住,我还有 25 个其他专栏。我是否仍然应该将其放入聚合函数中并按所有其他列进行分组,还是有更简单的方法?

sql sql-server aggregate-functions
2个回答
0
投票

您可以将

SUM()
CASE
语句一起使用。

SELECT SoccerTeam, Player, Goals,
    CASE WHEN SUM(Goals) OVER (PARTITION BY SoccerTeam) > 0 THEN 'y' ELSE 'n' END AS GoalsInTeam
FROM YourTable;

0
投票

为此,您可以在 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;
© www.soinside.com 2019 - 2024. All rights reserved.