Eu tenho esta tabela:
eu ia | área | nome | valor |
---|---|---|---|
1 | UM | abc | 1.2 |
2 | B | abc | 2.3 |
3 | C | definitivamente | 3.4 |
Consigo calcular o SUM
de values
para cada um name
:
SELECT
name,
SUM(value) AS "total"
FROM table
GROUP BY name;
e produzirá:
nome | total |
---|---|
abc | 3.5 |
definitivamente | 3.4 |
Agora quero adicionar esses valores como uma coluna calculada na tabela, minha saída esperada é:
eu ia | área | nome | valor | total |
---|---|---|---|---|
1 | UM | abc | 1.2 | 3.5 |
2 | B | abc | 2.3 | 3.5 |
3 | C | definitivamente | 3.4 | 3.4 |
Minha tentativa foi adicionar a SELECT
cláusula como coluna:
SELECT
table.*,
(SELECT
SUM(value) AS "total"
FROM table
GROUP BY name)
FROM table
mas falha:
Subconsulta retorna mais de 1 linha
Eu entendo o porquê: ele SELECT
exibirá todos os nomes, não apenas o do registro atual. Então adicionei uma WHERE
cláusula forçando a seleção apenas do nome atual:
SELECT
id,
area,
name AS current_name,
value,
(SELECT
SUM(value)
FROM table
WHERE name=current_name
GROUP BY name) AS "total"
FROM table
funciona! A desvantagem é que a name
coluna agora é chamada current_name
.
Existe uma maneira de evitar o uso do alias para manter o nome real da coluna?
Você está procurando a função de janela
SUM OVER
.Uma solução de subconsulta seria assim:
tente algo assim: