then - reemplazar null por 0 postgresql
Usando COALESCE para manejar valores NULL en PostgreSQL (2)
Puede usar COALESCE
junto con NULLIF
para una solución corta y eficiente:
COALESCE( NULLIF(yourField,'''') , ''0'' )
La función NULLIF
devolverá nulo si yourField es igual al segundo valor ( ''''
en este caso), haciendo que la función COALESCE
funcione completamente en todos los casos:
QUERY | RESULT
---------------------------------------------------------------------------------
SELECT COALESCE(NULLIF(null ,''''),''0'') | ''0''
SELECT COALESCE(NULLIF('''' ,''''),''0'') | ''0''
SELECT COALESCE(NULLIF(''foo'' ,''''),''0'') | ''foo''
Tengo la siguiente consulta
SELECT DISTINCT
pt.incentive_marketing,
pt.incentive_channel,
pt.incentive_advertising
FROM test.pricing pt
WHERE pt.contract_id = 90000
group by 1,2,3
order by pt.incentive_marketing;
La consulta anterior devuelve el o / p como se muestra en la imagen adjunta
Sin embargo, quiero reemplazar todos los valores nulos por 0 usando COALESCE. Por favor, háganme saber cómo se puede lograr esto en la consulta SELECT anterior
Ahora modifiqué aún más la consulta usando fusionar como abajo
SELECT
COALESCE( pt.incentive_marketing, ''0'' ),
COALESCE(pt.incentive_channel,''0''),
COALESCE( pt.incentive_advertising,''0'')
FROM test.pricing pt
WHERE pt.contract_id = 90000
group by 1,2,3
el resultado de esto es como se adjunta en la imagen 2.
Aún recibo una fila con valores en blanco
Si usa 0
y una cadena vacía ''''
y null
para designar indefinido, tiene un problema de datos. Simplemente actualice las columnas y arregle su esquema.
UPDATE pt.incentive_channel
SET pt.incentive_marketing = NULL
WHERE pt.incentive_marketing = '''';
UPDATE pt.incentive_channel
SET pt.incentive_advertising = NULL
WHERE pt.incentive_marketing = '''';
UPDATE pt.incentive_channel
SET pt.incentive_channel = NULL
WHERE pt.incentive_marketing = '''';
Esto hará que la unión y la selección sean sustancialmente más fáciles de seguir.