sql >> Databasteknik >  >> RDS >> Mysql

Hur man får kumulativt totalt antal användare per dag i MySQL

Dagliga kumulativa totala användare är ett mycket användbart KPI-mått för att analysera användartillväxt, för varje företag. Men eftersom det inte finns någon inbyggd funktion för att beräkna löpande totalsumma i MySQL, här är SQL-frågan för att få kumulativt totalt antal användare per dag, även känd som rullande summa efter datum eller löpande summa användare.

Hur man får totalt antal användare per dag i MySQL

Här är stegen för att få totalt antal användare per dag i MySQL. Låt oss säga att du har följande tabell users(date_joined,user_id) som innehåller alla användar-ID med deras datum för registrering/registrering/anslutning för ditt företag.

mysql> create table users(date_joined date,user_id int);

mysql> insert into users(date_joined,user_id)
       values('2020-04-28',213),
       ('2020-04-28',214),
       ('2020-04-30',215),
       ('2020-04-28',216),
       ('2020-04-28',217),
       ('2020-04-30',218),
       ('2020-04-28',219),
       ('2020-04-28',220),
       ('2020-04-30',221),
       ('2020-05-01',222),
       ('2020-05-01',222),
       ('2020-05-01',223),
       ('2020-05-04',224),
       ('2020-05-04',225),
       ('2020-05-04',226),
       ('2020-05-04',226),
       ('2020-05-04',227),
       ('2020-05-04',228),
       ('2020-05-05',229),
       ('2020-05-05',230),
       ('2020-05-05',231),
       ('2020-05-05',232),
       ('2020-05-06',233),
       ('2020-05-06', 234);

mysql> select * from users;
+-------------+---------+
| date_joined | user_id |
+-------------+---------+
| 2020-04-28  |     213 |
| 2020-04-28  |     214 |
| 2020-04-30  |     215 |
| 2020-04-28  |     216 |
| 2020-04-28  |     217 |
| 2020-04-30  |     218 |
| 2020-04-28  |     219 |
| 2020-04-28  |     220 |
| 2020-04-30  |     221 |
| 2020-05-01  |     222 |
| 2020-05-01  |     222 |
| 2020-05-01  |     223 |
| 2020-05-04  |     224 |
| 2020-05-04  |     225 |
| 2020-05-04  |     226 |
| 2020-05-04  |     226 |
| 2020-05-04  |     227 |
| 2020-05-04  |     228 |
| 2020-05-05  |     229 |
| 2020-05-05  |     230 |
| 2020-05-05  |     231 |
| 2020-05-05  |     232 |
| 2020-05-06  |     233 |
| 2020-05-06  |     234 |
+-------------+---------+

Först tittar vi på en SQL-fråga för att beräkna det dagliga antalet registreringar

mysql> select date(date_joined),count(user_id) 
       from users 
       group by date(date_joined);
+-------------------+----------------+
| date(date_joined) | count(user_id) |
+-------------------+----------------+
| 2020-04-28        |        6       |
| 2020-04-30        |        3       |
| 2020-05-01        |        3       |
| 2020-05-04        |        6       |
| 2020-05-05        |        4       |
| 2020-05-06        |        2       |
+-------------------+----------------+

Nästa, här är SQL-frågan för att få kumulativt antal användare per dag i MySQL. Vi kommer att använda ovanstående SQL som en underfråga för att få löpande totalt i SQL.

mysql> set @csum := 0;

mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select date(date_joined) as date_joined,count(user_id) as new_users
             from users
             group by date(date_joined)
            ) as temp
            order by date_joined;
+-------------+-----------+-------------+
| date_joined | new_users | total_users |
+-------------+-----------+-------------+
| 2020-04-28  |         6 |           6 |
| 2020-04-30  |         3 |           9 |
| 2020-05-01  |         3 |          12 |
| 2020-05-04  |         6 |          18 |
| 2020-05-05  |         4 |          22 |
| 2020-05-06  |         2 |          24 |
+-------------+-----------+-------------+

I ovanstående fråga ställer vi in ​​en temporär variabel csum till 0. Sedan använder vi den för varje rad för att beräkna och lagra den kumulativa summan av användare.

När du har fått kumulativt totalt antal användare per dag i MySQL kan du plotta det på ett linjediagram eller instrumentpanel med ett rapporteringsverktyg som Ubiq och dela det med ditt team. Här är ett linjediagram skapat med Ubiq.

Om du vill få en villkorad löpande totalsumma i MySQL kan du lägga till en WHERE-sats i underfrågan, enligt dina krav.

mysql> set @csum := 0;
mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select date(date_joined) as date_joined,count(user_id) as new_users
             from users 
             WHERE <condition>
             group by date(date_joined)
            ) as temp
            order by date_joined;

Du kan enkelt ändra ovanstående SQL-fråga för att beräkna det totala antalet användare per vecka, månad, kvartal och år. Låt oss titta på dem en efter en. Vi kommer att använda DATE_FORMAT-funktionen för att enkelt få vecka, månad från datumkolumner.

Bonus Läs:Hur man beräknar intäkter i MySQL

Hur man får totalt antal användare per vecka i MySQL

Här är SQL-frågan för att få totalt antal användare per vecka i MySQL. I SQL-frågan för att få kumulativt antal användare per dag behöver du bara ändra aggregeringsfunktionen i underfrågan, från date(date_joined) till date_format(date_format,'%U') .

mysql> set @csum := 0;
mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select date_format(date_joined,'%U') as date_joined,
               count(user_id) as new_users
             from users
             group by date_format(date_joined,'%U')
            ) as temp
            order by date_joined;

I ovanstående fråga kan du också använda WEEK-funktionen istället för DATE_FORMAT, det vill säga använda WEEK(date_joined) istället för DATE_FORMAT(date_joined,'%U')

Bonus Läs:Hur man får uppgifter om aktuell månad i MySQL

Hur får man kumulativt totalt antal användare per månad i MySQL

Här är SQL-frågan för att få totalt antal användare per månad i MySQL. I SQL-frågan för att få kumulativt antal användare per dag behöver du bara ändra aggregeringsfunktionen i underfrågan, från date(date_joined) till date_format(date_format,'%b') .

mysql> set @csum := 0;

mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select date_format(date_joined,'%b') as date_joined,
               count(user_id) as new_users
             from users
             group by date_format(date_joined,'%b')
            ) as temp
            order by date_joined;

Bonusläs:Hur man får de senaste 3 månadernas försäljningsdata i MySQL

Hur får man kumulativt totalt antal användare per kvartal i MySQL

Här är SQL-frågan för att få totalt antal användare per kvartal i MySQL. I SQL-frågan för att få kumulativt antal användare per dag behöver du bara ändra aggregeringsfunktionen i underfrågan, från date(date_joined) till quarter(date_format) .

mysql> set @csum := 0;
mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select quarter(date_joined) as date_joined,
               count(user_id) as new_users
             from users
             group by quarter(date_joined)
            ) as temp
            order by date_joined;

Hur man får kumulativt antal användare per år i MySQL

Här är SQL-frågan för att få totalt antal användare per år i MySQL. I SQL-frågan för att få totalt antal användare per dag behöver du bara ändra aggregeringsfunktionen i underfrågan, från date(date_joined) till år(datumformat) .

mysql> set @csum := 0;
mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select year(date_joined) as date_joined,
               count(user_id) as new_users
             from users
             group by year(date_joined)
            ) as temp
            order by date_joined;

Det är allt! Du kan prova ovanstående SQL-frågor för att få totalt antal användare per dag i MySQL. Om du vill skapa diagram, instrumentpaneler och rapporter från MySQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.

  1. TO_CHAR av en Oracle PL/SQL TABLE-typ

  2. Oracle-funktionsexempel för att få antal dagar mellan två datum

  3. SQL Server:DELETE vs TRUNCATE

  4. En lösning för att DATEDIFF() ignorerar SET DATEFIRST i SQL Server (T-SQL-exempel)