sql >> Database >  >> RDS >> Mysql

Mysql-berekening in select-statement

Over het algemeen was SQL niet echt bedoeld om "lopende totalen" op te leveren zoals u wenst. Andere RDBMS hebben eigen extensies geïntroduceerd om analytische functies te leveren die dit soort berekeningen mogelijk maken, maar MySQL mist dergelijke functies.

In plaats daarvan heeft men grofweg vier opties. In willekeurige volgorde:

  1. Verzamel een lopend totaal in uw toepassing, terwijl u de resultatenset doorloopt;

  2. Wijzig uw schema om een ​​lopend totaal in uw database bij te houden (vooral handig in situaties als deze, waar nieuwe gegevens alleen "tot het einde" worden toegevoegd);

  3. Een self-join groeperen:

    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. Verzamel het lopende totaal in een gebruikersvariabele :

    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. Het aantal tekens en cijfers in een tekenreeks zoeken

  2. Doctrine Paginator selecteert hele tabel (erg traag)?

  3. Tijdelijk databaseontwerp, met een twist (live vs conceptrijen)

  4. Kan provider niet initialiseren. Ontbrekend of onjuist schema