sql >> Databasteknik >  >> RDS >> Mysql

Beräkna saldo med mysql

Kort svar, ja

Längre svar, du kan använda en variabel för att räkna upp den när den itererar nerför raderna, dvs.

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

, (SELECT @Balance := 0) AS variableInit säkerställer att @Balance initieras till 0 innan du börjar. För varje rad ställer den sedan in @Balance till @Balance + In - Out , och matar sedan ut det beräknade värdet.

Det är också värt att se till att BESTÄLLNINGEN är konsekvent eftersom saldot annars kommer att variera beroende på vilken ordning raderna returneras. Om du till exempel vill beställa den bakåt till framsidan, kan du använda detta som en underfråga eftersom den yttre frågan handlar om de beräknade värdena och därmed säkerställer att saldot förblir korrekt, dvs.

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


  1. Använder funktionen COALESCE för att göra värden separerade med kommatecken

  2. PostgreSQL Autoincrement

  3. Hur inaktiverar jag tillfälligt triggers i PostgreSQL?

  4. Insikt i SQL Server Unique Constraints