Su método es bastante razonable. Buena captura en el nullif()
en el sum()
, de paso. Aunque el else
cláusula es calculado solo después de then
, los componentes de else se calculan durante la agregación, por lo que log(0)
devolvería un error.
Creo que hay algunas formas más sencillas de calcular el signo, como:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
o:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Sin embargo, qué versión es "más simple" es una cuestión de opinión.