Necesito agregar algunas sesiones por día, país, etc. La tabla tiene un monto de transacción para cada sesión (en moneda local) y un campo con el tipo de cambio a EUR para el momento de la transacción. Me gusta esto:
amount | currency | exchange_rate | date | countryEjecuté sum(amount/exchange_rate), sin embargo, para aproximadamente el 0,5% de las filas, el valor de exchange_rate es 0 y, por lo tanto, arroja el error "no se puede dividir por 0".
Intenté ejecutarlo con case cuando:
sum(case when exchange_rate = 0 then sum(amount) else sum(amount/exchange_rate) end) as volumePero las sumas aparentemente anidadas no están permitidas. ¿Alguien tiene una idea de cómo puedo obtener el resultado que lo anterior debería producir lógicamente, pero sin sumas anidadas en un caso cuando declaración?
Suponiendo que un tipo de cambio de 0 indica que la cantidad ya está en EUR , puede hacer lo siguiente:
sum(amount / case when exchange_rate = 0 then 1 else exchange_rate end)Creo que quieres:
sum(case when exchange_rate = 0 then amount else amount/exchange_rate end) as volumeO por escribir un poco menos:
sum(amount / coalesce(nullif(exchange_rate, 0), 1)) as volumeEsencialmente, desea considerar el tipo de cambio como 1 cuando es cero. Tu puedes hacer:
sum(case when exchange_rate = 0 then amount else amount/exchange_rate end ) as volume