sql >> Database teknologi >  >> RDS >> Mysql

Beregn balance med mysql

Kort svar, ja

Længere svar, du kan bruge en variabel til at tælle den op, mens den itererer ned ad rækkerne, 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 sikrer, at @Balance initialiseres til 0, før du starter. For hver række indstilles @Balance til at være @Balance + In - Out , og udlæser derefter den beregnede værdi.

Det er også værd at sikre sig, at ORDREN er konsistent, da saldoen ellers vil variere afhængigt af hvilken rækkefølge rækkerne returneres. Hvis du for eksempel vil bestille det tilbage til forsiden, kan du bruge dette som en underforespørgsel, da den ydre forespørgsel omhandler de beregnede værdier og dermed sikre, at saldoen forbliver 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. Bruger samme kolonne flere gange i WHERE-sætning

  2. Forward Engineering MySQL Workbench Error 1064

  3. Sådan aktiveres/deaktiveres dataadgang i SQL Server (T-SQL-eksempel)

  4. Forespørgselsydelsesoptimering i MySQL