SQL实例展示常用语法

SQL:结构化查询语言(Structured Query Language)

留存率

现有一表Retention如下

idnameregister_timelogout_time
101Anna2018-01-01 00:00:01.0002018-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. ...

      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
            评论
            添加红包

            请填写红包祝福语或标题

            红包个数最小为10个

            红包金额最低5元

            当前余额3.43前往充值 >
            需支付:10.00
            成就一亿技术人!
            领取后你会自动成为博主和红包主的粉丝 规则
            hope_wisdom
            发出的红包
            实付
            使用余额支付
            点击重新获取
            扫码支付
            钱包余额 0

            抵扣说明:

            1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
            2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

            余额充值