sql >> Databasteknik >  >> RDS >> Mysql

Mysql-beräkning i select-satsen

Generellt sett var SQL inte riktigt avsett att ge "löpande totaler" som du önskar. Andra RDBMS har introducerat proprietära tillägg för att leverera analytiska funktioner som möjliggör beräkningar av detta slag, men MySQL saknar sådana funktioner.

Istället har man i stort sett fyra alternativ. Utan särskild ordning:

  1. Samla en löpande summa i din applikation, när du loopar över resultatuppsättningen;

  2. Ändra ditt schema för att hålla reda på en löpande summa i din databas (särskilt bra i situationer som denna, där ny data bara läggs till "till slutet");

  3. Gruppera en självanslutning:

    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. Samla den löpande summan i en användarvariabel :

    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. ORA-03113:slutet av filen på kommunikationskanalen

  2. Välj ett inlägg som inte har en viss tagg

  3. PHP-varning:mysqli_connect():(HY000/2002):Anslutning nekad

  4. PDB Koppla bort ORA-17528 Fel