sql >> Databáze >  >> RDS >> Mysql

Vypočítejte zůstatek pomocí mysql

Krátká odpověď, ano

Delší odpověď, můžete použít proměnnou k jejímu sečtení, když se iteruje po řádcích, tj.

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 zajišťuje, že @Balance je inicializován na 0, než začnete. Pro každý řádek pak nastaví @Balance na @Balance + In - Out a poté vydá vypočítanou hodnotu.

Také stojí za to se ujistit, že ORDER je konzistentní, protože jinak se bude zůstatek lišit v závislosti na tom, v jakém pořadí jsou řádky vráceny. Pokud byste to pak chtěli seřadit například zpět dopředu, mohli byste to použít jako poddotaz, protože pak se vnější dotaz zabývá vypočítanými hodnotami, čímž se zajistí, že zůstatek zůstane správný, tj.

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. načíst parametr z uložené procedury?

  2. AKTUALIZACE SQL pro začátečníky

  3. Python 3.4.0 s databází MySQL

  4. Vyberte poslední zprávu mezi komunikací dvou uživatelů v mysql