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

Mysql-beregning i select statement

Generelt var SQL egentlig ikke beregnet til at give "løbende totaler", som du ønsker. Andre RDBMS har introduceret proprietære udvidelser for at levere analytiske funktioner, der muliggør beregninger af denne art, men MySQL mangler sådanne funktioner.

I stedet har man stort set fire muligheder. Uden bestemt rækkefølge:

  1. Akkumuler en løbende total i din applikation, mens du går gennem resultatsættet;

  2. Ændre dit skema for at holde styr på en løbende total i din database (især godt i situationer som denne, hvor nye data kun tilføjes "til slutningen");

  3. Gruppér en selv-deltagelse:

    SELECT   a.Sale_Date,
             SUM(a.Stock_Delivered)                AS Stock_Delivered,
             SUM(a.Units_Sold)                     AS Units_Sold,
             SUM(b.Stock_Delivered - b.Units_Sold) AS `Stock Balance`
    FROM     sales_report a
        JOIN sales_report b ON b.Sale_Date <= a.Sale_Date
    GROUP BY a.Sale_Date
    
  4. Akkumuler den løbende total i en brugervariabel :

    SELECT   Sale_Date,
             Stock_Delivered,
             Units_Sold,
             @t := @t + Stock_Delivered - Units_Sold AS `Stock Balance`
    FROM     sales_report, (SELECT @t:=0) init
    ORDER BY Sale_Date
    


  1. MySQL JOIN for at erstatte ID'er med værdi fra en anden tabel

  2. Hvordan forbereder man en erklæring til opdateringsforespørgsel?

  3. Entity Framework og flere skemaer

  4. Skjulte funktioner i PostgreSQL