Ein Group By über eine UDF kann nicht zu einem Index führen und benötigt halt einen Tablescan.
Je nach Größe dauert das halt.
Dass der Optimizer nun entscheidet, erst mal eine Kopie mit dem berechneten Ergebnis zu erstellen ist doch nur verständlich.

Was die Namensgebung angeht, so heißt dein Feld durch die Einbettung in Anführungszeichen immer "Preis", denn das ist casesensitive.