我正在尝试使用Sybase中的SQL实现几何乘法。我的百分比范围从-100到+无穷大。由于Sybase中没有产品聚合,因此我使用了exp和log方法的近似值。没有为log(0)定义日志,所以我必须捕获值-100。
我想做类似的事情:
SELECT KEY, IF VALUE <= EXP(SUM(LOG(CASE WHEN VALUE <= -100 THEN 0 ELSE 1+VALUE / 100 END)))
FROM TABLE
GROUP BY KEY
查询部分CASE WHEN VALUE <= -100 THEN 0 ELSE 1+VALUE / 100 END
在函数外部有效,但不在其出现的日志函数内部。
错误消息:关键字FROM
附近的语法不正确。
知道如何解决这个问题吗?
答案 0 :(得分:1)
我应该在这之前喝咖啡...感谢您的帮助。
IF VALUE <=
不应该在那里。这是来自我做过的旧测试而忘记删除它。LOG()
在错误的地方。这是正确答案:
SELECT KEY, EXP(SUM(CASE WHEN VALUE <= -100 THEN 0 ELSE LOG(1+VALUE / 100) END))
FROM TABLE
GROUP BY KEY
编辑:实际上,由于价值是百分比,因此以最终结果获得最终结果可能更为逻辑:
SELECT KEY, (EXP(SUM(CASE WHEN VALUE <= -100 THEN 0 ELSE LOG(1+VALUE / 100) END)) - 1) * 100
FROM TABLE
GROUP BY KEY