使用postgres 10的Window函数无法使NULLIF工作

时间:2017-11-24 17:59:21

标签: sql postgresql

我正在尝试使用NULLIF来避免在使用postgres的 over 窗口函数时出现除零错误。

它会在“over”或“near”附近抛出“语法错误。”

我正在使用此查询:

  SELECT 
    dlo.nombre_cadena, dpr.marca_producto,
    sum(rep.mes_33_uni) / NULLIF(sum(sum(rep.mes_33_uni)), 0) over (partition by dpr.marca_producto) AS porcentajep,
    FROM
    rpro_dim.reporte33_full rep
JOIN rpro_dim.dim_productos_retail dpr ON dpr.id_dim_prod_retail = rep.id_dim_prod_retail
JOIN rpro_dim.dim_locales dlo ON dlo.id_dim_local = rep.id_dim_localgroup by 
dlo.nombre_cadena, dpr.marca_producto
order by dlo.nombre_cadena, dpr.marca_producto

1 个答案:

答案 0 :(得分:1)

使用

NULLIF(sum(sum(rep.mes_33_uni)), 0) over (partition by dpr.marca_producto) -- error!

您正尝试将nullif()作为窗口函数执行。

您应该将整个表达式作为nullif()的参数:

NULLIF(sum(sum(rep.mes_33_uni)) over (partition by dpr.marca_producto), 0)