Przepraszam za zły tytuł, nie byłem pewien, jaki byłby dobry tytuł do tego.
To obecnie (uproszczony widok) danych, z którymi pracuję
Agent | Commission
---------|------------
Smith | 100
Neo | 200
Morpheus | 300
Muszę obliczyć procent całkowitej prowizji, za którą odpowiedzialny jest każdy agent.
Tak więc, dla Agenta Smitha, Procent zostanie obliczony jako (Agent Smith's commission / Sum(commission)*100
Więc moje oczekiwane dane będą
Agent | Commission | % Commission
---------|---------------|---------------
Smith | 100 | 17
Neo | 200 | 33
Morpheus | 300 | 50
Mam funkcję zwracającą prowizję dla każdego agenta. Mam inną funkcję zwracającą procent jako (Commission/Sum(Commission))*100
. Problem polega na tym, że Sum(commission)
oblicza się dla każdego wiersza, a biorąc pod uwagę, że to zapytanie byłoby uruchamiane w hurtowni danych, zestaw danych byłby raczej duży (obecnie jest to nieco mniej niż 2000 rekordów) i całkiem szczerze mówiąc, złe podejście (IMO ).
Czy istnieje sposób, aby Sum(Commission)
nie obliczać dla każdego pobieranego wiersza?
Myślałem coś w wierszach dwuczęściowego zapytania, pierwsza część pobierałaby sum(commission)
zmienną / typ pakietu, a druga część odnosiła się do tej wstępnie obliczonej wartości, ale nie jestem pewien, jak to osiągnąć.
Ograniczam się do używania SQL i korzystam z Oracle 10g R2.