あなたの方法はかなり合理的です。 nullif()
の良いキャッチ sum()
で 、 ところで。 else
節 is 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)
ただし、どちらのバージョンが「よりシンプル」かは意見の問題です。