【sql】查询每日活跃用户数/每日新增用户数/每日累计用户数

建表

CREATE TABLE denglu(
id varchar(10),
dt date)

插入测试数据

INSERT INTO denglu 
VALUES 
('01','2021-10-01'),
('01','2021-10-01'),
('02','2021-10-03'),
('02','2021-10-02'),
('03','2021-10-01'),
('03','2021-10-04'),
('04','2021-10-06'),
('05','2021-10-07'),
('06','2021-10-06'),
('06','2021-10-05'),
('06','2021-10-04');

Q1 每日活跃用户数
按天数统计,需要group by dt,一个用户一天内可能多次登陆,需要distinct去重,语法如下

SELECT dt,count(DISTINCT id) FROM denglu 
GROUP BY dt ORDER BY dt

Q2 每日新增用户数
该日新增用户,即在此日期之前没有出现过的用户,因此每个用户的最小登陆日期计为那一日的新增,语法如下

SELECT dt2,count(DISTINCT id) FROM (
SELECT id,min(dt)AS dt2 FROM denglu GROUP BY id
)
GROUP BY dt2

Q3 每日累计用户数
先放语法

SELECT dt2,count(DISTINCT CASE WHEN dt1<=dt2 THEN id end) FROM (
(SELECT distinct dt AS dt1,id FROM denglu) a
LEFT JOIN (SELECT DISTINCT dt AS dt2 FROM denglu)b ON 1=1
)
GROUP BY dt2

拆解,先找出每日登陆用户

SELECT distinct dt AS dt1,id FROM denglu
DT1ID
2021-10-0103
2021-10-0101
2021-10-0202
2021-10-0302
2021-10-0403
2021-10-0406
2021-10-0506
2021-10-0604
2021-10-0606
2021-10-0705

第二步,左关联一个distinct去重的日期,方便后面统计每日累计

SELECT * FROM (
(SELECT distinct dt AS dt1,id FROM denglu) a
LEFT JOIN (SELECT DISTINCT dt AS dt2 FROM denglu)b ON 1=1
)ORDER BY DT1
FETCH FIRST 20 ROWS ONLY;
DT1IDDT2
2021-10-01012021-10-01
2021-10-01012021-10-02
2021-10-01012021-10-03
2021-10-01012021-10-04
2021-10-01012021-10-05
2021-10-01012021-10-06
2021-10-01012021-10-07
2021-10-01032021-10-01
2021-10-01032021-10-02
2021-10-01032021-10-03
2021-10-01032021-10-04
2021-10-01032021-10-05
2021-10-01032021-10-06
2021-10-01032021-10-07
2021-10-02022021-10-01
2021-10-02022021-10-02
2021-10-02022021-10-03
2021-10-02022021-10-04
2021-10-02022021-10-05
2021-10-02022021-10-06

之后就以DT2为每日统计,按天数统计,group by DT2,当DT1<=DT2,则计为DT2累计用户

  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值