mysql常见指标计算笔记

文章目录

1、用户拉新情况相关指标

可以分析每日浏览深度(按日期分组),每时浏览深度(按时间分组)

PV(页面浏览量/访问量)

  • 定义 :用户对页面的每一次浏览/刷新都计为1次PV(同一用户多次访问同一页面会重复计数)。
  • 计算公式
    PV = 所有用户的页面浏览次数之和
  • 示例:用户A浏览页面X 3次,用户B浏览页面X 2次 → 页面X的PV = 3 + 2 = 5

UV(独立访客数)

  • 定义 :统计周期内(如1天),独立的用户数(同一用户多次访问只计1次,以设备/账号/IP等唯一标识区分)。
  • 计算公式
    UV = 去重后的独立用户标识数量
  • 示例:用户A用手机访问页面X 3次,用户B用电脑访问页面X 2次 → 页面X的UV = 2(2个独立用户)

PVUV(人均页面浏览量)

  • 定义:平均每个独立用户的页面浏览次数,反映用户的访问深度。
  • 计算公式
    PVUV = PV ÷ UV
  • 示例:页面X的PV=5,UV=2 → PVUV = 5 ÷ 2 = 2.5
sql 复制代码
SELECT
    dates,
    count( IF ( behavior_type = 'pv', 1, NULL ) ) AS PV,
    count( DISTINCT user_id ) AS UV,
    round( ( count( IF ( behavior_type = 'pv', 1, NULL ) ) / count( DISTINCT user_id ) ), 2 ) AS PVUV
FROM
    userbehavior
GROUP BY
    dates;

2、用户留存率指标

2.1 留存率计算

(1)计算次日留存率方法1

sql 复制代码
-- 次日留存率:SQL164
with t1 as(
    select
    uid,
    min(day_time) as first_day
    from
    (select uid, date(in_time) as day_time from tb_user_log) r1
    group by uid
    having date_format(first_day,'%Y-%m')='2021-11'
),
t2 as(
select
t1.uid,
first_day,
day_time as second_day
from t1
left join
(select uid, date(in_time) as day_time from tb_user_log
union
select uid, date(out_time) as day_time from tb_user_log) b
on t1.uid = b.uid and datediff(day_time,first_day)=1
)
select first_day,
# round(sum(if(second_day is null, 0 ,1))/count(uid),2) as uv_left_rate
round(count(second_day)/count(uid),2) as uv_left_rate
from t2
group by first_day
order by first_day


-- 次日留存率:
CREATE TABLE df_retention_1
( dates CHAR ( 10 ), retention_1 FLOAT );

INSERT INTO df_retention_1
SELECT
ub1.dates,
count( ub2.user_id ) / count( ub1.user_id ) AS retention_1
FROM
( SELECT DISTINCT user_id, dates FROM userbehavior ) AS ub1
LEFT JOIN ( SELECT DISTINCT user_id, dates FROM userbehavior ) AS ub2 ON ub2.user_id = ub1.user_id
AND ub2.dates = date_add( ub1.dates, INTERVAL 1 DAY )
GROUP BY
ub1.dates;

(2)计算次日留存率方法2

sql 复制代码
SELECT
  -- 统计基准日(用户首次登录的日期,按这个日期分组算留存)
  first_login.login_date AS 统计日期,
  -- 1. 次日留存率:登录日期差 = 1 天
  CONCAT(
    ROUND(
      (COUNT(DISTINCT CASE WHEN DATEDIFF(second_login.login_date, first_login.login_date) = 1 THEN second_login.user_id END) 
       / COUNT(DISTINCT first_login.user_id)) * 100, 
      2
    ), 
    "%"
  ) AS 次日留存率,
  -- 2. 三日留存率:登录日期差 = 2 天(当日为0,次日1,第三日就是2)
  CONCAT(
    ROUND(
      (COUNT(DISTINCT CASE WHEN DATEDIFF(second_login.login_date, first_login.login_date) = 2 THEN second_login.user_id END) 
       / COUNT(DISTINCT first_login.user_id)) * 100, 
      2
    ), 
    "%"
  ) AS 三日留存率
FROM
  -- 表1:所有用户每日登录去重(1人1天1条)
  (SELECT DISTINCT user_id, login_date FROM user_login_table) first_login
-- 左连接:关联用户后续登录记录(满足「后续日期>基准日期」,覆盖所有留存可能)
LEFT JOIN
  (SELECT DISTINCT user_id, login_date FROM user_login_table) second_login
ON
  first_login.user_id = second_login.user_id -- 同一用户关联
  AND second_login.login_date > first_login.login_date -- 核心条件:后续登录日期>基准日
GROUP BY
  first_login.login_date -- 按基准日分组,每日的留存单独算
ORDER BY
  first_login.login_date DESC; -- 按日期倒序,优先看最新数据

3、用户行为

指标:用户购买行为

用户购买次数(按照用户分组统计)

用户复购率:购买次数超过两次的用户比上总购买用户数,计算思路为使用用户表t和重复购买的用户表sub进行左连接,计算sub表中的用户数,占连接后表的用户数的比例。

指标:用户转化率

用户PV,FAV,CART, BUY

计算方法:对于用户行为字段,按照用户和商品分组统计对应行为的数量

用户行为归一标准化

计算方法:对于上一步按照用户和商品分组统计过的指标,不管数量,只要大于0就有过这种行为统计为1

用户行为路径记录

计算方法:以用户和商品为唯一字段,记录行为路径

统计不同用户行为路径的数量,并按照漏斗分析来分类分组计数

4、用户定位RFM模型

相关推荐
风月歌5 小时前
小程序项目之使命召唤游戏助手源代码(java+vue+小程序+mysql)
java·mysql·小程序·毕业设计·源码
源代码•宸5 小时前
goframe框架签到系统项目(安装 redis )
服务器·数据库·经验分享·redis·后端·缓存·golang
5 小时前
TIDB——TIKV——分布式事务与MVCC
数据库·分布式·tidb·分布式数据库·tikv·
5 小时前
TIDB——TIKV——RocksDB
数据库·分布式·tidb·分布式数据库·
Gauss松鼠会5 小时前
【openGauss】如何在openGauss中实现类似Oracle中constructor function、member function的功能
数据库·oracle·database·gaussdb
roman_日积跬步-终至千里5 小时前
【后端】预生产环境与生产环境数据库表隔离方案
数据库
过期动态5 小时前
JDBC进阶篇:拓展功能与连接池运用详解
java·开发语言·数据库·mysql·oracle·intellij-idea·mybatis
yuezhilangniao5 小时前
PostgreSQL vs MySQL:从零开始基础命令对比指南
数据库·mysql·postgresql
枫叶丹45 小时前
【Qt开发】Qt窗口(十) -> QInputDialog 输入对话框
c语言·开发语言·数据库·c++·qt