Sql-Server

如何在同一行中獲取行值和總和/聚合?(SQL 伺服器)

  • November 28, 2018

只是想知道我是否有類似的數據

name  score
   A    2
   B    5
   C    7

我想要第三排

    name  score  total
       A    2     14
       B    5     14
       C    7     14

我的意思是最終 - 我想在各種總計中找到各種行條目的“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

這可能有效,但查詢同一個表兩次以計算什麼似乎效率低下。有沒有我想念的更簡單的方法?

是的,有辦法。它被稱為“視窗聚合函式”:

select
   A.name, A.score, 
   sum(A.score) over () as total
from myTable A ;

OVER ()意味著聚合(在這種情況下為總和)超過了整個結果集。如果您希望總數超過說出不同的名稱(假設您有相同的行name,您可以使用OVER (PARTITION BY name).

引用自:https://dba.stackexchange.com/questions/223594