【发布时间】:2014-12-17 06:21:51
【问题描述】:
我正在尝试在 Sybase 中使用 SQL 实现几何乘法。我的百分比范围从 -100 到 +infinity。由于 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附近的语法不正确。
知道如何解决这个问题吗?
【问题讨论】:
-
你说log(0)没有定义,然后在
VALUE <= -100时尝试计算。这是故意的吗? -
fwiw:看起来您正在选择两个值 - KEY 后跟一个乱码/不完整的“if”语句。我无权访问 Sybase 服务器(您使用的是 IQ 还是 ASE?)来测试,但如果 CASE 在 LOG() 中不起作用,则反转逻辑并将单独的 LOG() 放在两个分支中一个案例。
-
如果你想让
VALUE <= -100不参与求和,你应该让CASE语句返回1,因为log(1)=0 -
如果您要编辑问题中的示例代码,请考虑将其添加到问题的末尾,而不是更改初始代码。现在代码正下方的注释没有意义。
-
是的,我开始更正这条线,我也想过同样的想法,所以我把它写回了错误的方式以供参考。