sql >> Database >  >> RDS >> Mysql

Saldo berekenen met mysql

Kort antwoord, ja

Langer antwoord, je kunt een variabele gebruiken om het op te tellen terwijl het door de rijen itereert, d.w.z.

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

De , (SELECT @Balance := 0) AS variableInit zorgt ervoor dat @Balance wordt geïnitialiseerd op 0 voordat u begint. Voor elke rij wordt @Balance vervolgens ingesteld op @Balance + In - Out en voert vervolgens de berekende waarde uit.

Het is ook de moeite waard om ervoor te zorgen dat de BESTELLING consistent is, omdat anders het saldo zal variëren afhankelijk van de volgorde waarin de rijen worden geretourneerd. Als u het dan bijvoorbeeld van achteren naar voren wilt bestellen, kunt u dit als een subquery gebruiken, aangezien de buitenste query dan de berekende waarden behandelt en er zo voor zorgt dat het saldo correct blijft, d.w.z.

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. AVG ophalen waarbij nul- of nulwaarden worden genegeerd

  2. Verbeteringen in partitionering in PostgreSQL 11

  3. SQLite IS NULL

  4. pg_dump postgres-database van externe server wanneer poort 5432 is geblokkeerd