Metode Anda cukup masuk akal. Tangkapan yang bagus di nullif()
di sum()
, omong-omong. Meskipun else
klausa adalah dihitung hanya setelah then
, komponen dari else dihitung selama agregasi -- jadi log(0)
akan mengembalikan kesalahan.
Saya rasa ada beberapa cara yang lebih sederhana untuk menghitung tanda, seperti:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
atau:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Namun, versi mana yang "lebih sederhana" adalah masalah pendapat.