Gostaria de saber se tenho dados como
name score
A 2
B 5
C 7
Eu gostaria de ter uma 3ª linha
name score total
A 2 14
B 5 14
C 7 14
Quero dizer, em última análise, quero encontrar 'z-scores' ou percentis de várias entradas de linha em vários totais. Só não tenho certeza se existe uma maneira simples de comparar valores de linha com valores agregados, exceto por uma subconsulta como
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
Isso pode funcionar, mas parece ineficiente consultar a mesma tabela duas vezes para saber o que é um cálculo. Existe alguma maneira mais simples de fazer isso que estou perdendo?
Sim, há um jeito. É chamado de "funções de agregação de janela":
O
OVER ()
significa que a agregação (soma neste caso) é sobre todo o conjunto de resultados. Se você quisesse o total sobre, diga nomes diferentes (supondo que você tivesse linhas com o mesmoname
, você poderia usarOVER (PARTITION BY name)
.