Míra udržení je definována jako počet zákazníků, kteří nadále používají produkt/službu. Je obtížné vypočítat kohortovou retenční analýzu. Zde je návod, jak vypočítat míru udržení v SQL pro analýzu udržení zákazníků. Můžete jej použít k výpočtu míry retence v MySQL, PostgreSQL, SQL Server a Oracle. Podíváme se také na SQL dotaz pro udržení zákazníků. Míra udržení se měří jako počet vracejících se uživatelů v pravidelných intervalech, například každý týden nebo měsíc, seskupených podle týdne jejich registrace.
Vypočteme udržení podle týdenní kohorty v SQL a skončíme s tabulkou jako je ta níže, která ukazuje počet zákazníků, kteří se znovu přihlásili po první registraci před několika týdny, za každý týden registrace.
Jak vypočítat míru uchování v SQL?
Zde jsou kroky k výpočtu míry uchování v SQL. Řekněme, že máte následující tabulku, která ukládá user_id a login_date návštěvy každého uživatele.
mysql> create table login(login_date date,user_id int, id int not null auto_increment, primary key (id)); mysql> insert into login(login_date,user_id) values('2020-01-01',10),('2020-01-02',12),('2020-01-03',15), ('2020-01-04',11),('2020-01-05',13),('2020-01-06',9), ('2020-01-07',21),('2020-01-08',10),('2020-01-09',10), ('2020-01-10',2),('2020-01-11',16),('2020-01-12',12), ('2020-01-13',10),('2020-01-14',18),('2020-01-15',15), ('2020-01-16',12),('2020-01-17',10),('2020-01-18',18), ('2020-01-19',14),('2020-01-20',16),('2020-01-21',12), ('2020-01-22',21),('2020-01-23',13),('2020-01-24',15), ('2020-01-25',20),('2020-01-26',14),('2020-01-27',16), ('2020-01-28',15),('2020-01-29',10),('2020-01-30',18); mysql> select * from login; +------------+---------+----+ | login_date | user_id | id | +------------+---------+----+ | 2020-01-01 | 10 | 1 | | 2020-01-02 | 12 | 2 | | 2020-01-03 | 15 | 3 | | 2020-01-04 | 11 | 4 | | 2020-01-05 | 13 | 5 | | 2020-01-06 | 9 | 6 | | 2020-01-07 | 21 | 7 | | 2020-01-08 | 10 | 8 | | 2020-01-09 | 10 | 9 | | 2020-01-10 | 2 | 10 | | 2020-01-11 | 16 | 11 | | 2020-01-12 | 12 | 12 | | 2020-01-13 | 10 | 13 | | 2020-01-14 | 18 | 14 | | 2020-01-15 | 15 | 15 | | 2020-01-16 | 12 | 16 | | 2020-01-17 | 10 | 17 | | 2020-01-18 | 18 | 18 | | 2020-01-19 | 14 | 19 | | 2020-01-20 | 16 | 20 | | 2020-01-21 | 12 | 21 | | 2020-01-22 | 21 | 22 | | 2020-01-23 | 13 | 23 | | 2020-01-24 | 15 | 24 | | 2020-01-25 | 20 | 25 | | 2020-01-26 | 14 | 26 | | 2020-01-27 | 16 | 27 | | 2020-01-28 | 15 | 28 | | 2020-01-29 | 10 | 29 | | 2020-01-30 | 18 | 30 | +------------+---------+----+
Budeme vytvářet týdenní kohortovou analýzu. V závislosti na vašem produktu/službě jej můžete změnit na měsíční/denní.
K výpočtu míry retence v SQL budeme používat MySQL. Můžete také vypočítat míru odchodu pro PostgreSQL.
1. Počet návštěv za týden
Abychom vypočítali míru udržení v SQL, nejprve seskupíme každou návštěvu podle týdne přihlášení.
mysql> SELECT user_id, week(login_date) AS login_week FROM login GROUP BY user_id,week(login_date); +---------+------------+ | user_id | login_week | +---------+------------+ | 2 | 1 | | 9 | 1 | | 10 | 0 | | 10 | 1 | | 10 | 2 | | 10 | 4 | | 11 | 0 | | 12 | 0 | | 12 | 2 | | 12 | 3 | | 13 | 1 | | 13 | 3 | | 14 | 3 | | 14 | 4 | | 15 | 0 | | 15 | 2 | | 15 | 3 | | 15 | 4 | | 16 | 1 | | 16 | 3 | | 16 | 4 | | 18 | 2 | | 18 | 4 | | 20 | 3 | | 21 | 1 | | 21 | 3 | +---------+------------+
Podívejte se také na Jak vypočítat týdenní aktivní uživatele (WAU) v MySQL.
2. Vypočítejte PRVNÍ TÝDEN přihlášení pro každého uživatele
Dále, abychom mohli vypočítat míru udržení v SQL, musíme vypočítat první týden přihlášení pro každého uživatele. Jednoduše použijeme funkci MIN a GROUP BY pro výpočet prvního týdne přihlášení pro každého uživatele
mysql> SELECT user_id, min(week(login_date)) AS first_week FROM login GROUP BY user_id; +---------+------------+ | user_id | first_week | +---------+------------+ | 2 | 1 | | 9 | 1 | | 10 | 0 | | 11 | 0 | | 12 | 0 | | 13 | 1 | | 14 | 3 | | 15 | 0 | | 16 | 1 | | 18 | 2 | | 20 | 3 | | 21 | 1 | +---------+------------+
3. Sloučit 2 tabulky pro login_week a first_week
Dále získáme login_week a first_week vedle sebe pro každého uživatele pomocí níže uvedeného dotazu s INNER JOIN, abychom vypočítali míru udržení v SQL.
mysql> select a.user_id,a.login_week,b.first_week as first_week from (SELECT user_id, week(login_date) AS login_week FROM login GROUP BY user_id,week(login_date)) a, (SELECT user_id, min(week(login_date)) AS first_week FROM login GROUP BY user_id) b where a.user_id=b.user_id; +---------+------------+------------+ | user_id | login_week | first_week | +---------+------------+------------+ | 2 | 1 | 1 | | 9 | 1 | 1 | | 10 | 0 | 0 | | 10 | 1 | 0 | | 10 | 2 | 0 | | 10 | 4 | 0 | | 11 | 0 | 0 | | 12 | 0 | 0 | | 12 | 2 | 0 | | 12 | 3 | 0 | | 13 | 1 | 1 | | 13 | 3 | 1 | | 14 | 3 | 3 | | 14 | 4 | 3 | | 15 | 0 | 0 | | 15 | 2 | 0 | | 15 | 3 | 0 | | 15 | 4 | 0 | | 16 | 1 | 1 | | 16 | 3 | 1 | | 16 | 4 | 1 | | 18 | 2 | 2 | | 18 | 4 | 2 | | 20 | 3 | 3 | | 21 | 1 | 1 | | 21 | 3 | 1 | +---------+------------+------------+
4. Vypočítat číslo týdne
Od této chvíle je snadné vypočítat míru retence v SQL. Dále vypočítáme rozdíl mezi login_week a first_week, abychom vypočítali week_number (počet týdne)
mysql> select a.user_id,a.login_week,b.first_week as first_week, a.login_week-first_week as week_number from (SELECT user_id, week(login_date) AS login_week FROM login GROUP BY user_id,week(login_date)) a, (SELECT user_id, min(week(login_date)) AS first_week FROM login GROUP BY user_id) b where a.user_id=b.user_id; +---------+------------+------------+-------------+ | user_id | login_week | first_week | week_number | +---------+------------+------------+-------------+ | 2 | 1 | 1 | 0 | | 9 | 1 | 1 | 0 | | 10 | 0 | 0 | 0 | | 10 | 1 | 0 | 1 | | 10 | 2 | 0 | 2 | | 10 | 4 | 0 | 4 | | 11 | 0 | 0 | 0 | | 12 | 0 | 0 | 0 | | 12 | 2 | 0 | 2 | | 12 | 3 | 0 | 3 | | 13 | 1 | 1 | 0 | | 13 | 3 | 1 | 2 | | 14 | 3 | 3 | 0 | | 14 | 4 | 3 | 1 | | 15 | 0 | 0 | 0 | | 15 | 2 | 0 | 2 | | 15 | 3 | 0 | 3 | | 15 | 4 | 0 | 4 | | 16 | 1 | 1 | 0 | | 16 | 3 | 1 | 2 | | 16 | 4 | 1 | 3 | | 18 | 2 | 2 | 0 | | 18 | 4 | 2 | 2 | | 20 | 3 | 3 | 0 | | 21 | 1 | 1 | 0 | | 21 | 3 | 1 | 2 | +---------+------------+------------+-------------+
5. Otočte výsledek
Nakonec musíme výsledek otočit, vypočítat míru uchování v SQL a vygenerovat tabulku kohorty. V naší kontingenční tabulce budeme mít jeden řádek pro každý první_týden hodnotu a jeden sloupec pro každé číslo_týdne obsahující počet uživatelů, kteří se po ‚n‘ týdnech mohou vrátit k používání vašeho produktu/služby. K tomu používáme následující dotaz.
mysql> select first_week, SUM(CASE WHEN week_number = 0 THEN 1 ELSE 0 END) AS week_0, SUM(CASE WHEN week_number = 1 THEN 1 ELSE 0 END) AS week_1, SUM(CASE WHEN week_number = 2 THEN 1 ELSE 0 END) AS week_2, SUM(CASE WHEN week_number = 3 THEN 1 ELSE 0 END) AS week_3, SUM(CASE WHEN week_number = 4 THEN 1 ELSE 0 END) AS week_4, SUM(CASE WHEN week_number = 5 THEN 1 ELSE 0 END) AS week_5, SUM(CASE WHEN week_number = 6 THEN 1 ELSE 0 END) AS week_6, SUM(CASE WHEN week_number = 7 THEN 1 ELSE 0 END) AS week_7, SUM(CASE WHEN week_number = 8 THEN 1 ELSE 0 END) AS week_8, SUM(CASE WHEN week_number = 9 THEN 1 ELSE 0 END) AS week_9 from ( select a.user_id,a.login_week,b.first_week as first_week,a.login_week-first_week as week_number from (SELECT user_id, week(login_date) AS login_week FROM login GROUP BY user_id,week(login_date)) a,(SELECT user_id, min(week(login_date)) AS first_week FROM login GROUP BY user_id) b where a.user_id=b.user_id ) as with_week_number group by first_week order by first_week; +------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+ | first_week | week_0 | week_1 | week_2 | week_3 | week_4 | week_5 | week_6 | week_7 | week_8 | week_9 | +------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 4 | 1 | 3 | 2 | 2 | 0 | 0 | 0 | 0 | 0 | | 1 | 5 | 0 | 3 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | | 2 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 3 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
Nyní víme, jak vypočítat míru retence v SQL. Výše uvedené dotazy můžete také vypočítat retenci v MySQL, PostgreSQL.
Nakonec můžete použít nástroj pro vizualizaci dat k vykreslení výše uvedené kohortové analýzy retence do tabulky. Zde je tabulka uchování kohorty vytvořená pomocí Ubiq.
Mimochodem, pokud chcete vytvářet kontingenční tabulky, grafy a dashboardy z databáze MySQL, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.