Phương pháp của bạn là khá hợp lý. Bắt tốt nullif()
trong sum()
, nhân tiện. Mặc dù else
mệnh đề là chỉ được tính sau then
, các thành phần của cái khác được tính toán trong quá trình tổng hợp - vì vậy log(0)
sẽ trả về một lỗi.
Tôi nghĩ rằng có một số cách đơn giản hơn để tính dấu hiệu, chẳng hạn như:
power(-1, sum(case when column1 < 0 then 1 else 0 end))
hoặc:
(case when sum(case when column1 < 0 then 1 else 0 end) % 2 = 0 then 1 else -1 end)
Tuy nhiên, phiên bản nào "đơn giản hơn" là một vấn đề cần quan tâm.