SQL實例展示常用語法

SQL:結構化查詢語言(Structured Query Language)

留存率

現有一表Retention如下

id name register_time logout_time
101 Anna 2018-01-01 00:00:01.000 2018-01-02 00:00:01.003

register_time表示用戶註冊時間,logout_time表示用戶註銷時間。現要計算每一日的用戶次日留存率(假如1號有5人註冊,這5人有2人在2號註銷,則1號當天的次日留存率爲3/5=60%)

1、建表

  1. CREATE TABLE Retention
  2. ( 
  3. id int NOT NULL PRIMARY KEY,
  4. name nvarchar(50) NOT NULL, 
  5. register_timedatetime NOT NULL, 
  6. logout_timedatetime NOT NULL, 
  7. );

2、插入數據

  1. INSERT INTO Retention
  2. VALUES (101, 'Anna', CONVERT(datetime,2018-01-01 00:00:01', 20), CONVERT(datetime,2018-01-01 00:00:01', 20));

3、更新數據

  1. UPDATE Retention
  2. SET logout_time = convert(datetime, 2018-01-02 00:00:02.003', 20)
  3. WHERE id=101;

4、計算留存率

當前表中數據如下:
這裏寫圖片描述
SQL代碼如下:

  1. SELECT  new.register_day AS '日期', 
  2.         new.cnt AS '當日註冊數',
  3.         out.cnt AS '次日留存數', 
  4.         CAST(out.cnt*100.0/new.cnt AS varchar(20))+'%' AS '留存率'
  5. FROM    (SELECT COUNT(1) as cnt, CONVERT(nvarchar(20),register_time,111) AS register_day 
  6.         FROM Retention
  7.         GROUP BY CONVERT(nvarchar(20),register_time,111)
  8.         ) AS new
  9.         JOIN
  10.         (SELECT COUNT(1) as cnt, CONVERT(nvarchar(20),register_time,111) AS register_day 
  11.         FROM Retention
  12.         where CONVERT(nvarchar(20),logout_time,111) > CONVERT(nvarchar(20),DATEADD(DAY,1,register_time),111)
  13.         GROUP BY CONVERT(nvarchar(20),register_time,111)
  14.         ) AS out
  15.         ON new.register_day=out.register_day

計算結果:
這裏寫圖片描述

這個方法好麻煩,有沒有簡單一點的方法/(ㄒoㄒ)/~~

5、刪除表

  1. DROP TABLE Retenrtion
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章