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

MySQL agreguje po měsících s průběžným součtem

MySQL bohužel neposkytuje analytické funkce, jako Oracle a SQL Server.

Jedním ze způsobů, jak získat „průběžný součet“, je použít uživatelskou proměnnou, něco takového:

  SELECT t.Date
       , t.NewUsers
       , @rt := @rt + t.NewUsers AS `Running Total`
    FROM (SELECT @rt := 0) i
    JOIN (
           SELECT DATE_FORMAT(created,'%Y%m%d') AS `Date`
                , COUNT(item_id) as `NewUsers`
             FROM AP_user
            WHERE YEAR(created) > 2011
              AND user_groups = '63655'
              AND user_active = 1
              AND userID NOT IN $excludedUsers
            GROUP BY DATE_FORMAT(created,'%Y-%m')
            ORDER BY DATE_FORMAT(created,'%Y-%m') ASC
         ) t

POZNÁMKA:Chování paměťových proměnných, jak je uvedeno výše, není v tomto kontextu zaručeno. Ale pokud jsme s dotazem opatrní, můžeme získat předvídatelné, opakovatelné výsledky v příkazech SELECT. Chování paměťových proměnných se může v budoucí verzi změnit, takže tento přístup nebude použitelný.

POZNÁMKA:V podstatě jsem váš dotaz zabalil do závorek a dal mu alias jako inline pohled (což MySQL nazývá „odvozená tabulka“). Udělal jsem pár změn ve vašem dotazu, vaše GROUP BY má potenciál seskupit leden 2012 spolu s lednem z roku 2013, změnil jsem to. Také jsem přidal klauzuli ORDER BY.




  1. chyba mysql 'TYPE=MyISAM'

  2. Proč je v MySQL bezpečné vypnout innodb_support_xa pro aktualizace s jedním vláknem?

  3. Získejte pokročilou hodnotu pole opakovače vlastních polí na základě jiné hodnoty opakovače

  4. 7 způsobů, jak vrátit všechny tabulky s primárním klíčem na SQL Server