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

相关推荐
爱吃羊的老虎8 分钟前
【大模型】向量数据库:Chroma、Weaviate、Qdrant
数据库·语言模型
数据大魔方9 分钟前
【期货量化实战】跨期套利策略:价差交易完整指南(TqSdk源码详解)
数据库·python·算法·github·程序员创富
l1t19 分钟前
NineData第三届数据库编程大赛:用一条 SQL 解数独问题我的参赛程序
数据库·人工智能·sql·算法·postgresql·oracle·数独
麦麦大数据1 小时前
J009 美食推荐可视化大数据系统vue+springboot
vue.js·spring boot·mysql·推荐算法·美食·可视化分析·沙箱支付
菜鸟笔记本2 小时前
linux设置定时备份mysql数据
linux·mysql·oracle
千寻技术帮2 小时前
10347_基于Springboot的新疆旅游管理系统
spring boot·mysql·旅游·在线旅游
施嘉伟2 小时前
一次生产环境 SQL 不走索引的排查过程
数据库·sql
踏浪无痕2 小时前
SQLInsight:从JDBC底层到API调用的零侵入SQL监控方案
数据库·后端·开源
小宇的天下2 小时前
Calibre nmDRC Results(19-1)
服务器·数据库·oracle
Web项目开发3 小时前
Mysql创建索引的SQL脚本,复制粘贴即可使用
数据库·sql·mysql