我正在尝试使用以下查询查询amazon redshift数据库:
NVL(SUM(CASE WHEN (original_price>0) THEN (original_price - sale_price1)
ELSE (NVL(savings_low,0)) END),0)
然而,这给出了
无效操作:“NVL”或附近的语法错误
错误。
这是从最初的mySQL查询改编而来的,看起来像这样(并且在mysql中工作):
IFNULL(SUM(IF(original_price>0, original_price - sale_price1,
IFNULL(savings_low,0))),0)
有人可以看到这有什么问题,并建议修复吗?
答案 0 :(得分:1)
select语句的那部分完全有效。您可以使用以下查询对其进行验证,该查询将测试所有八种空值和非空值的组合:
with mock_data as
(
SELECT NULL::integer as original_price, null::integer as sale_price1, null::float as savings_low UNION ALL
SELECT 100, 50, 0.10 UNION ALL
SELECT 100, 50, NULL UNION ALL
SELECT 100, NULL, 0.10 UNION ALL
SELECT 100, NULL, NULL UNION ALL
SELECT NULL, 50, 0.10 UNION ALL
SELECT NULL, 50, NULL UNION ALL
SELECT NULL, NULL, 0.10
)
SELECT NVL(
SUM(
CASE WHEN (original_price > 0)
THEN (original_price - sale_price1)
ELSE (NVL (savings_low,0))
END)
,0)
FROM mock_data
语法错误位于查询的其他位置:我怀疑SELECT语句中的上一个内容是缺少尾随逗号。