Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Làm thế nào để tính toán tỷ lệ duy trì trong SQL?

Tỷ lệ giữ chân được định nghĩa là số lượng khách hàng tiếp tục sử dụng một sản phẩm / dịch vụ. Rất khó để tính toán phân tích tỷ lệ duy trì theo nhóm thuần tập. Dưới đây là cách tính toán tỷ lệ duy trì trong SQL để phân tích tỷ lệ giữ chân khách hàng. Bạn có thể sử dụng nó để tính toán tỷ lệ duy trì trong MySQL, PostgreSQL, SQL Server &Oracle. Chúng tôi cũng sẽ xem xét truy vấn SQL để giữ chân khách hàng. Tỷ lệ giữ chân người dùng được đo bằng số lượng người dùng quay lại, trong một khoảng thời gian đều đặn, chẳng hạn như hàng tuần hoặc hàng tháng, được nhóm lại theo tuần đăng ký của họ.

Chúng tôi sẽ tính toán tỷ lệ giữ chân theo nhóm hàng tuần trong SQL và kết thúc bằng một bảng như bảng bên dưới, cho biết số lượng khách hàng đã đăng nhập lại sau lần đầu tiên đăng ký vài tuần trước, cho mỗi tuần đăng ký.

Làm cách nào để tính tỷ lệ duy trì trong SQL?

Dưới đây là các bước để tính toán tỷ lệ duy trì trong SQL. Giả sử bạn có bảng sau lưu trữ user_id và login_date của mỗi lượt truy cập của người dùng.

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 |
+------------+---------+----+

Chúng tôi sẽ tạo phân tích nhóm thuần tập hàng tuần. Tùy thuộc vào sản phẩm / dịch vụ của bạn, bạn có thể thay đổi nó thành hàng tháng / hàng ngày.

Chúng tôi sẽ sử dụng MySQL để tính toán tỷ lệ duy trì trong SQL. Bạn cũng có thể tính toán tỷ lệ churn cho PostgreSQL.

1. Lượt truy cập nhóm theo tuần

Để tính toán tỷ lệ giữ chân trong SQL, trước tiên, chúng tôi sẽ nhóm từng lượt truy cập theo tuần đăng nhập.

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 |
+---------+------------+

Ngoài ra, hãy xem Cách tính số người dùng hoạt động hàng tuần (WAU) trong MySQL.

2. Tính TUẦN đăng nhập ĐẦU TIÊN cho mỗi người dùng

Tiếp theo, để tính toán tỷ lệ duy trì trong SQL, chúng ta cần tính toán tuần đầu tiên đăng nhập cho mỗi người dùng. Chúng tôi sẽ chỉ sử dụng hàm MIN và GROUP BY để tính toán tuần đăng nhập đầu tiên cho mỗi người dùng

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. Hợp nhất 2 bảng cho login_week và first_week

Tiếp theo, chúng tôi nhận login_week và first_week cạnh nhau cho mỗi người dùng bằng cách sử dụng truy vấn bên dưới, với INNER JOIN, để tính toán tỷ lệ giữ chân trong 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. Tính số Tuần

Từ đây, có thể dễ dàng tính toán tỷ lệ duy trì trong SQL. Tiếp theo, chúng tôi tính toán sự khác biệt giữa login_week và first_week để tính toán week_number (số tuần)

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. Xoay vòng kết quả

Cuối cùng, chúng ta cần xoay vòng kết quả, để tính tỷ lệ duy trì trong SQL và tạo bảng thuần tập. Trong bảng tổng hợp của chúng tôi, chúng tôi sẽ có một hàng cho mỗi tuần đầu tiên giá trị và một cột cho mỗi tuần_số chứa số lượng người dùng quay lại sau ‘n’ tuần để sử dụng sản phẩm / dịch vụ của bạn. Đối với điều này, chúng tôi sử dụng truy vấn sau.

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 |
+------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

Bây giờ chúng ta biết cách tính tỷ lệ duy trì trong SQL. Bạn cũng có thể truy vấn ở trên để tính toán tỷ lệ duy trì trong MySQL, PostgreSQL.

Cuối cùng, bạn có thể sử dụng công cụ trực quan hóa dữ liệu để vẽ biểu đồ phân tích nhóm giữ chân ở trên trong một bảng. Đây là bảng tỷ lệ giữ chân nhóm thuần tập được tạo bằng Ubiq.

Nhân tiện, nếu bạn muốn tạo bảng tổng hợp, biểu đồ và trang tổng quan từ cơ sở dữ liệu MySQL, bạn có thể thử Ubiq. Chúng tôi cung cấp bản dùng thử miễn phí 14 ngày.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di chuyển dữ liệu

  2. Bước tới Bắt đầu Phát triển Cơ sở dữ liệu Theo hướng Thử nghiệm (TDDD)

  3. DELETE VS DROP trong SQL

  4. Lập hồ sơ dữ liệu:Khám phá chi tiết dữ liệu

  5. Giảm thiểu phân mảnh chỉ mục