Twoja metoda jest całkiem rozsądna. Dobry chwyt na nullif()
w sum()
, przy okazji. Chociaż else
klauzula jest obliczane tylko po then
, składniki else są obliczane podczas agregacji — więc log(0)
zwróci błąd.
Myślę, że istnieje kilka prostszych sposobów obliczania znaku, takich jak:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
lub:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Jednak to, która wersja jest „prostsza”, jest kwestią opinii.