/ SQL

Transacciones Bancarias con SQL: Cómo sumar importes, restar interes y calcular operaciones de cambio de moneda

Supongamos que tienes una cuenta bancaria y realizas transacciones en diferentes monedas, y deseas saber cuánto dinero has gastado y recibido en una semana en particular, así como cuánto dinero has gastado y recibido en USD.

Para hacer esto, debes ejecutar una consulta SQL en la base de datos del banco. La consulta que utilizarías es:

SELECT SUM(amount) - SUM(fee) AS total, SUM((amount - fee) / exchange_rate) AS total_usd
FROM transactions
WHERE user_id = 345 AND status = 'success' AND accepted_at BETWEEN '2023-02-13 00:00:00' AND '2023-02-20 00:00:00';

Veamos esta consulta y expliquemos cada paso.

Ahora veamos las partes específicas de la consulta.

La primera línea de la consulta es:

SELECT SUM(amount) - SUM(fee) AS total,

Esta parte de la consulta calcula la cantidad total de dinero que has gastado y recibido en todas las monedas durante el período de tiempo especificado. La función SUM(amount) suma todas las cantidades de tus transacciones, y la función SUM(fee) suma todas las tarifas que has pagado por esas transacciones. Al restar las tarifas totales del total de la cantidad de transacciones, obtienes la cantidad neta de dinero que has gastado y recibido durante ese período de tiempo. La parte AS total de la consulta da un nombre a este cálculo, para que puedas referirte a él más adelante.

La segunda línea de la consulta es:

SUM((amount - fee) / exchange_rate) AS total_usd

Esta parte de la consulta calcula la cantidad total de dinero que has gastado y recibido en USD durante el período de tiempo especificado. La parte (amount - fee) / exchange_rate de la consulta convierte la cantidad de cada transacción de su moneda original a USD utilizando la tasa de cambio. La función SUM luego suma todas las cantidades convertidas para darte la cantidad total de dinero que has gastado y recibido en USD. La parte AS total_usd de la consulta da un nombre a este cálculo, para que puedas referirte a él más adelante.

La última línea de la consulta es:

WHERE user_id = 345 AND status = 'success' AND accepted_at BETWEEN '2023-02-13 00:00:00' AND '2023-02-20 00:00:00';

Esta parte de la consulta filtra las transacciones según las siguientes condiciones.