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

MySQL агрегатиране по месеци с текуща обща сума

За съжаление MySQL не предоставя аналитични функции, като Oracle и SQL Server.

Един от начините да получите "текуща сума" е да използвате потребителска променлива, нещо като това:

  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

ЗАБЕЛЕЖКА:Поведението на променливите на паметта, както е използвано по-горе, не е гарантирано в този контекст. Но ако сме внимателни със заявката, можем да получим предвидими, повторяеми резултати в операторите SELECT. Поведението на променливите на паметта може да се промени в бъдеща версия, което прави този подход неработоспособен.

ЗАБЕЛЕЖКА:Основно увих вашата заявка в скоби и й дадох псевдоним като вграден изглед (това, което MySQL нарича "извлечена таблица"). Направих няколко промени във вашата заявка, вашата GROUP BY има потенциал да групира януари 2012 г. заедно с януари от 2013 г., промених това. Добавих и клауза ORDER BY.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ИЗБЕРЕТЕ само редове, които съдържат само буквено-цифрови знаци в MySQL

  2. Пребройте броя на появяванията на низ в поле VARCHAR?

  3. SQL / MySQL - Подреждане по дължина на колоната

  4. MySQL - Защо правилата COLLATION се игнорират от оператора LIKE за немски символ ß

  5. Какъв вид хеш използва mysql?