Вашият метод е доста разумен. Добър улов на nullif()
в sum()
, между другото. Въпреки че else
клауза е изчислен само след then
, компонентите на else се изчисляват по време на агрегацията -- така че log(0)
ще върне грешка.
Мисля, че има някои по-прости начини за изчисляване на знака, като например:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
или:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Коя версия обаче е "по-проста" е въпрос на мнение.