S takovou datovou strukturou bych byl velmi opatrný. Nejprve zkontrolujte, zda jsou všechna id
s mají přesně jednu cenu:
select id
from table t
group by id
having count(distinct price) > 1;
Myslím, že nejbezpečnější metodou je extrahovat konkrétní cenu pro každé id
(řekněme maximum) a poté proveďte agregaci:
select sum(price)
from (select id, max(price) as price
from table t
group by id
) t;
Poté jděte opravit data, abyste neměli opakovaný aditivní rozměr. Měla by existovat tabulka s jedním řádkem na ID a cenu (nebo možná s duplikáty, ale řízená datem účinnosti a ukončením).
Data jsou zmatená; neměli byste předpokládat, že cena je na všech řádcích pro dané ID stejná. Musíte to zkontrolovat pokaždé, když použijete pole, dokud data neopravíte.