Mysql
 sql >> база данни >  >> RDS >> Mysql

Изчислете баланса с mysql

Кратък отговор, да

По-дълъг отговор, можете да използвате променлива, за да я изброите, докато се движи надолу по редовете, т.е.

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 гарантира, че @Balance се инициализира на 0, преди да започнете. За всеки ред след това задава @Balance като @Balance + In - Out и след това извежда изчислената стойност.

Също така си струва да се уверите, че ПОРЪЧКАТА е последователна, тъй като в противен случай Балансът ще варира в зависимост от реда, в който се връщат редовете. Ако искате след това да го подредите отпред, например, можете да използвате това като подзаявка, тъй като тогава външната заявка се занимава с изчислените стойности, като по този начин гарантира, че балансът остава правилен, т.е.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Entity Framework с MySQL - Времето за изчакване е изтекло при генериране на модел

  2. Mysql Средна колона за време?

  3. Странна грешка в MySQL само за четене

  4. Смесване на ANSI 1992 JOIN и COMMA в заявка

  5. Заявка за намиране на таблици, променени през последния час