sql >> Base de Datos >  >> RDS >> Mysql

Calcular saldo con mysql

Respuesta corta, sí

Respuesta más larga, puede usar una variable para contarla a medida que itera hacia abajo en las filas, es decir,

SELECT 
    `table`.`ID`,
    `table`.`In`,
    `table`.`Out`,
    @Balance := @Balance + `table`.`In` - `table`.`Out` AS `Balance`
FROM `table`, (SELECT @Balance := 0) AS variableInit
ORDER BY `table`.`ID` ASC

El , (SELECT @Balance := 0) AS variableInit asegura que @Balance se inicialice a 0 antes de comenzar. Para cada fila, establece @Balance para que sea @Balance + In - Out y luego genera el valor calculado.

También vale la pena asegurarse de que el ORDEN sea coherente, ya que, de lo contrario, el Saldo variará según el orden en que se devuelvan las filas. Si quisiera ordenarlo de atrás hacia adelante, por ejemplo, podría usar esto como una subconsulta, ya que la consulta externa se ocupa de los valores calculados, lo que garantiza que el Saldo permanezca correcto, es decir,

SELECT
    `balanceCalculation`.`ID`,
    `balanceCalculation`.`In`,
    `balanceCalculation`.`Out`,
    `balanceCalculation`.`Balance`
FROM (
    SELECT 
        `table`.`ID`,
        `table`.`In`,
        `table`.`Out`,
        @Balance := @Balance + `table`.`In` - `table`.`Out` AS `Balance`
    FROM `table`, (SELECT @Balance := 0) AS variableInit
    ORDER BY `table`.`ID` ASC
) AS `balanceCalculation`
ORDER BY `balanceCalculation`.`ID` DESC