如何获取同一行中的行值和总和/聚合?(SQL 服务器)

use*_*867 0 sql-server aggregate select

只是想知道我是否有类似的数据

 name  score
    A    2
    B    5
    C    7
Run Code Online (Sandbox Code Playgroud)

我想要第三排

     name  score  total
        A    2     14
        B    5     14
        C    7     14
Run Code Online (Sandbox Code Playgroud)

我的意思是最终 - 我想找到不同总计中不同行条目的“z 分数”或百分位数。我只是不确定是否有一种简单的方法可以将行值与聚合值进行比较,除了通过子查询,例如

select A.name, A.score, B.total
from myTable A
left join
(select name, sum(score) from myTable group by name) B
on A.name = B.name
Run Code Online (Sandbox Code Playgroud)

这可以工作,但是两次查询同一个表来计算什么似乎效率很低。有没有我缺少的更简单的方法?

ype*_*eᵀᴹ 5

是的,有办法。它称为“窗口聚合函数”:

select
    A.name, A.score, 
    sum(A.score) over () as total
from myTable A ;
Run Code Online (Sandbox Code Playgroud)

OVER ()意味着聚合(在本例中为总和)涵盖整个结果集。如果您希望总数超过不同的名称(假设您有相同的行name,则可以使用OVER (PARTITION BY name).