Il tuo metodo è abbastanza ragionevole. Buona cattura su nullif() nel sum() , a proposito. Sebbene l'else clausola è calcolato solo dopo then , i componenti di else vengono calcolati durante l'aggregazione, quindi log(0) restituirebbe un errore.
Penso che ci siano alcuni modi più semplici per calcolare il segno, come ad esempio:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
oppure:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Tuttavia, quale versione sia "più semplice" è una questione di opinione.