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.