Tendría mucho cuidado con una estructura de datos como esta. Primero, verifique que todos los id
s tienen exactamente un precio:
select id
from table t
group by id
having count(distinct price) > 1;
Creo que el método más seguro es extraer un precio particular para cada id
(diga el máximo) y luego haga la agregación:
select sum(price)
from (select id, max(price) as price
from table t
group by id
) t;
Luego, corrija sus datos para que no tenga una dimensión aditiva repetida. Debería haber una tabla con una fila por ID y precio (o quizás con duplicados pero controlados por fechas de vigencia y finalización).
Los datos están desordenados; no debe suponer que el precio es el mismo en todas las filas para una identificación determinada. Debe verificar eso cada vez que use los campos, hasta que corrija los datos.