Vaše metoda je docela rozumná. Dobrý úlovek na nullif()
v sum()
, mimochodem. Ačkoli else
klauzule je vypočítáno až po then
, komponenty else se počítají během agregace -- takže log(0)
vrátí chybu.
Myslím, že existuje několik jednodušších způsobů výpočtu znaménka, například:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
nebo:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Nicméně, která verze je "jednodušší", je věcí názoru.