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模型

相关推荐
阿里小阿希29 分钟前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神34 分钟前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员44 分钟前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java1 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿1 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴1 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU1 小时前
三大范式和E-R图
数据库
MaCa .BaKa1 小时前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发
一江寒逸1 小时前
零基础从入门到精通MySQL(上篇):筑基篇——吃透核心概念与基础操作,打通SQL入门第一关
数据库·sql·mysql
@土豆1 小时前
Ubuntu 22.04 运行 Filebeat 7.11.2 崩溃问题分析及解决文档
linux·数据库·ubuntu