sql - Redshift 除以零谜题

标签 sql amazon-redshift vertica divide-by-zero

使用此代码,我得到了除以 0 的错误:

CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1 * INT2 / DENOMINATOR)
ELSE 0
END AS RATIO

但是,当我更改为以下代码时,它起作用了。
CASE
WHEN DENOMINATOR >= 0
THEN SUM(INT1) * INT2 / DENOMINATOR
ELSE 0
END AS RATIO

有人可以帮助我了解原因,以便将来避免这种情况吗?顺便说一句,第一个样本在 Vertica 中工作。我意识到对需要求和的内容求和而不是在求和之前进行计算是更好的编程实践。不过还是很好奇。

最佳答案

我认为避免被零除的最好方法是使用 nullif() :

SUM(INT1 * INT2 / NULLIF(DENOMINATOR, 0))

或者:
SUM(INT1) * INT2 / NULLIF(DENOMINATOR, 0)

这将返回 NULL ,我发现这对于除以零的情况更明智。您可以添加 COALESCE()获取 0 , 如果你喜欢。

关于sql - Redshift 除以零谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670600/

相关文章:

MYSQL 5.6.10 ANALYZE TABLE 锁问题

php - 无法使用 $_POST 传递隐藏的 PHP 值

sql - Vertica 和连接

sql - Objective C错误: "can' t locate the database".如何解决?

amazon-redshift - Redshift PostgresQL 语法 : is named window clause valid?

sql - AWS Redshift 列限制?

sql - 从亚马逊 Redshift 中的 now() 中提取时间

database - HP Vertica,我们可以在 Windows 上安装它吗?我们用于 Oracle 的 SQL 与 HP Vertica 相同吗?

mysql - 如何在vertica数据库中存储整数数组?

MySQL:获取在特定日期之前但未在特定日期之后登录的所有用户,未按预期工作