`

手把手教你用 SQL 实现电商产品用户分析(ORACLE)

 
阅读更多
--1.创建用户行为表
CREATE TABLE EVENTS
(
  DATES    DATE,  
  USER_ID  VARCHAR2(50),
  ITEM_ID  VARCHAR2(50),
  BEHAVIOR VARCHAR2(50)
);
COMMENT ON TABLE EVENTS
  IS '用户行为表';
COMMENT ON COLUMN EVENTS.DATES
  IS '日期';
COMMENT ON COLUMN EVENTS.USER_ID
  IS '用户ID';
COMMENT ON COLUMN EVENTS.ITEM_ID
  IS '产品ID';
COMMENT ON COLUMN EVENTS.BEHAVIOR
  IS 'pv-浏览/点击、fav-收藏、cart-加入购物车、buy-下单支付';  
  
--2.插入测试数据
TRUNCATE TABLE EVENTS;
INSERT INTO EVENTS(DATES,USER_ID,ITEM_ID,BEHAVIOR)
SELECT TO_DATE('20201125', 'YYYYMMDD') + ABS(MOD(DBMS_RANDOM.RANDOM, 30)),
       '0000' || ABS(MOD(DBMS_RANDOM.RANDOM, 10)),
       'ISSUE_0'||ABS(MOD(DBMS_RANDOM.RANDOM, 10)),
       DECODE(ABS(MOD(DBMS_RANDOM.RANDOM, 6)),
              0,
              'PV',
              1,
              'PV',
              2,
              'PV',
              3,
              'BUY',
              4,
              'FAV',
              'CART')
  FROM dual CONNECT BY ROWNUM <= 100;
COMMIT;

--3.统计PV、UV、以及pv/uv
--pv page view数
SELECT COUNT(*) AS PV,
       COUNT(DISTINCT T.USER_ID) AS UV,
       COUNT(*) / COUNT(DISTINCT T.USER_ID) PVDIVUV
  FROM EVENTS T
 WHERE T.BEHAVIOR = 'PV';
--4.购买用户数
SELECT COUNT(DISTINCT T.USER_ID) FROM EVENTS T
 WHERE T.BEHAVIOR = 'BUY';
--5.平均日浏览量
SELECT AVG(PV)
  FROM (SELECT T.DATES, COUNT(*) PV
          FROM EVENTS T
         WHERE T.BEHAVIOR = 'PV'
         GROUP BY T.DATES) D;
--6.平均日用户量
SELECT AVG(UV)
  FROM (SELECT T.DATES, COUNT(DISTINCT USER_ID) UV
          FROM EVENTS T
         WHERE T.BEHAVIOR = 'PV'
         GROUP BY T.DATES) D;
--7.Bounce rate 跳出率(只有一次点击行为的用户/总用户数)
--假设只有一个页面可以浏览,用户点进页面后要么收藏加购付款,要么跳出。
SELECT SUM(BOUNCE_USER) BOUNCE_USERS,
       SUM(TOTAL_USER) TOTAL_USERS,
       SUM(BOUNCE_USER) / SUM(TOTAL_USER) BOUNCE_RATE
  FROM (SELECT COUNT(T1.USER_ID) BOUNCE_USER, 0 AS TOTAL_USER
          FROM EVENTS T1
         WHERE T1.BEHAVIOR = 'PV'
           AND NOT EXISTS (SELECT 1
                  FROM EVENTS T2
                 WHERE T2.BEHAVIOR IN ('FAV', 'CART', 'BUY')
                   AND T1.USER_ID = T2.USER_ID)
        UNION ALL
        SELECT 0 AS BOUNCE_USER, COUNT(DISTINCT USER_ID) AS TOTAL_USER
          FROM EVENTS) T;
--8.漏斗分析
--转化率是以页面访问(PV) -> 加入购物车(CART)/收藏(FAV) -> 购买(BUY)路径为基准进行的计算,
--并且将收藏和加入购物车的行为进行了合并(考虑到这两个阶段不分先后顺序,而且都是确定购买意向的行为)
SELECT 
	TOTAL_CLICKED_USER,   --总访问用户数
	PV_TO_CART_FAV_USERS, --加入购物车/收藏用户数
	PV_TO_BUY_USERS,      --购买用户数
	PV_TO_CART_FAV_USERS/TOTAL_CLICKED_USER as pv_to_fav_cart_ratio, --访问->购物车/收藏转化率
	PV_TO_BUY_USERS/TOTAL_CLICKED_USER as pv_to_buy_ratio            --访问->购物车/收藏->购买转化率
FROM
(
	SELECT SUM(CASE WHEN T.PV_FLAG = 1 THEN 1 ELSE 0 END) TOTAL_CLICKED_USER,
	SUM(CASE WHEN T.PV_FLAG = 1 AND (T.FAV_FLAG = 1 OR T.CART_FLAG = 1) THEN 1 ELSE 0 END) PV_TO_CART_FAV_USERS,
	SUM(CASE WHEN T.PV_FLAG = 1 AND (T.FAV_FLAG = 1 OR T.CART_FLAG = 1) AND T.BUY_FLAG = 1 THEN 1 ELSE 0 END) PV_TO_BUY_USERS
	FROM 
	(
	SELECT USER_ID,MAX(CASE WHEN E.BEHAVIOR = 'PV' THEN 1 ELSE 0 END) PV_FLAG,
	MAX(CASE WHEN E.BEHAVIOR = 'FAV' THEN 1 ELSE 0 END) FAV_FLAG,
	MAX(CASE WHEN E.BEHAVIOR = 'CART' THEN 1 ELSE 0 END) CART_FLAG,
	MAX(CASE WHEN E.BEHAVIOR = 'BUY' THEN 1 ELSE 0 END) BUY_FLAG
	 FROM EVENTS E GROUP BY USER_ID
	)T
) TAR;


--9.每日新增购买/访问用户数
SELECT FRIST_DATES, COUNT(*) USERS
  FROM (SELECT E.USER_ID, MIN(DATES) FRIST_DATES
          FROM EVENTS E
         WHERE E.BEHAVIOR = 'PV'
         GROUP BY E.USER_ID) T
 GROUP BY FRIST_DATES;

SELECT FRIST_DATES, COUNT(*) USERS
  FROM (SELECT E.USER_ID, MIN(DATES) FRIST_DATES
          FROM EVENTS E
         WHERE E.BEHAVIOR = 'BUY'
         GROUP BY E.USER_ID) T
 GROUP BY FRIST_DATES;
--10.留存分析,同期群分析(同期群(cohort)是一组在特定时间做同样事的人)
SELECT *
  FROM (SELECT MIN_WEEK, COUNT(*) TOTAL_USERS
          FROM (SELECT USER_ID, TO_CHAR(MIN(DATES), 'ww') MIN_WEEK
                  FROM EVENTS T
                 WHERE T.BEHAVIOR = 'BUY'
                 GROUP BY USER_ID)
         GROUP BY MIN_WEEK) WEEKLY_USER
  LEFT JOIN (SELECT MIN_WEEK,
                    TO_CHAR(DATA_BUY.DATES, 'WW') - FIRWK_USER.MIN_WEEK WEEK_GAP,
                    COUNT(DISTINCT FIRWK_USER.USER_ID) REBUY_USERS
               FROM (SELECT USER_ID, TO_CHAR(MIN(DATES), 'WW') MIN_WEEK
                       FROM EVENTS T
                      WHERE T.BEHAVIOR = 'BUY'
                      GROUP BY USER_ID) FIRWK_USER
              INNER JOIN (SELECT * FROM EVENTS T WHERE T.BEHAVIOR = 'BUY') DATA_BUY
                 ON FIRWK_USER.USER_ID = DATA_BUY.USER_ID
              GROUP BY MIN_WEEK,
                       TO_CHAR(DATA_BUY.DATES, 'WW') - FIRWK_USER.MIN_WEEK) USERS_PER_WEEK
    ON WEEKLY_USER.MIN_WEEK = USERS_PER_WEEK.MIN_WEEK;
--11.复购分析
SELECT COUNT(USER_ID) DIS_BUYUSER,
       COUNT(CASE
               WHEN CNT > 1 THEN
                USER_ID
               ELSE
                NULL
             END) REBUY_USER,
       COUNT(CASE
               WHEN CNT > 1 THEN
                USER_ID
               ELSE
                NULL
             END) / COUNT(USER_ID) REBUY_USER_RATIO

  FROM (SELECT USER_ID, COUNT(*) CNT
          FROM EVENTS T
         WHERE T.BEHAVIOR = 'BUY'
         GROUP BY USER_ID) S;
--12.用户复购次数分布
SELECT BUY_REQ,
       USERS,
       SUM(USERS) OVER(ORDER BY BUY_REQ) CUM_USERS,
       SUM(USERS) OVER(ORDER BY BUY_REQ) / SUM(USERS) OVER() CUM_PCT_RATIO
  FROM (SELECT BUY_REQ, COUNT(DISTINCT USER_ID) USERS
          FROM (SELECT USER_ID, COUNT(*) BUY_REQ
                  FROM EVENTS T
                 WHERE T.BEHAVIOR = 'BUY'
                 GROUP BY USER_ID) T
         GROUP BY BUY_REQ);

 

分享到:
评论

相关推荐

    手把手教你写 SQL Join 联接 -

    手把手教你写 SQL Join 联接 手把手教你写 SQL Join 联接 - Defonds 的专栏 - CSDN博客手把手教你写 SQL Join 联接 - Defonds 的专栏 - CSDN博客

    手把手教你整理自己的SQLServer日志

    教程名称:手把手教你整理自己的SQL Server日志课程目录:【】MSSQL数据库日志满的快速解决办法【】SQL2008删除过期备份【】sqlserver数据库事务日志备份与恢复原理【】SQL_server日志清除法【】利用日志传送实现高...

    手把手教你SQLserver2008全文检索使用方法

    ### 手把手教你SQL Server 2008全文检索使用方法 #### 一、全文检索概述 全文检索功能是SQL Server 2008提供的一个强大特性,它允许用户通过关键词搜索来查找文本数据。这一功能对于那些需要处理大量文本信息的...

    手把手教你学DSP:基于TMS320F28335

    手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F28335 手把手教你学DSP:基于TMS320F...

    手把手教你用SQL server创建企业人事管理系统(精华)4

    总结来说,“手把手教你用SQL server创建企业人事管理系统(精华)4”这部分教程将深入讲解如何使用SQL Server设计、实施和优化一个高效的人事管理系统,涉及数据库设计、SQL查询、安全控制、性能优化等多个方面,是...

    手把手教你学dsp2812,手把手教你学dsp2812pdf下载,C,C++

    《手把手教你学DSP2812》是一本专为初学者设计的 DSP(Digital Signal Processor)学习指南,主要围绕TI公司的TMS320F2812 DSP芯片进行讲解。这本书以其全面且易懂的特性,为读者提供了一个深入理解数字信号处理及其...

    手把手教你用Microsoft.SQL.Server

    【标题】"手把手教你用Microsoft.SQL.Server" 涉及的是关于如何使用Microsoft SQL Server这一关系型数据库管理系统的学习教程。Microsoft SQL Server是微软公司推出的一款强大的数据存储和管理工具,广泛应用于企业...

    手把手教你学DSPPDF

    【标题】"手把手教你学DSPPDF"是一份针对数字信号处理(DSP)初学者的教程性PDF文档,旨在引领读者逐步掌握这一领域的基础知识。该文档可能包含了从理论概念到实际应用的全面讲解,适合那些希望踏入数字信号处理世界...

    手把手教你用C#制作RPG游戏

    《手把手教你用C#制作RPG游戏》是由罗培羽编著,海洋出版社于2014年5月出版的一本技术书籍,主要面向对游戏开发有兴趣,特别是想使用C#语言进行角色扮演游戏(RPG)开发的读者。本书通过详细的教学指导,帮助初学者...

    手把手教你学28335

    手把手教你学28335PDF文档,看了这个确实和2812有了对比

    手把手教你用VMware安装oracle10g RAC

    手把手教你用VMware安装oracle10g RAC

    手把手教你用SQL server创建企业人事管理系统(精华)1

    在构建企业人事管理系统的过程中...这个压缩包中的"手把手教你用SQL server创建企业人事管理系统(精华)1"很可能是教程的第一部分,涵盖了基础概念和初步步骤,后续章节可能将逐步深入到更具体的实施细节和技术要点。

    手把手教你用C#制作RPG游戏__罗培羽著

    罗培羽所著的《手把手教你用C#制作RPG游戏》,正是针对这一群体,特别是那些渴望运用C#技术制作角色扮演游戏(RPG)的读者们,提供了一条详细且实用的学习之路。 在《手把手教你用C#制作RPG游戏》中,罗培羽以自己...

    手把手教你用SQL server创建企业人事管理系统(精华)3

    本教程“手把手教你用SQL Server创建企业人事管理系统(精华)3”是系列教程的一部分,旨在帮助初学者和中级用户掌握如何利用SQL Server来搭建高效、稳定的人事系统。 首先,我们需要理解SQL Server的基础知识。SQL...

    手把手教你dsp28335,高清pdf

    手把手教你学DSP28335高清pdf文件,北京航空航天大学出版社

    手把手教你学dsp

    手把手教你学dsp F2812 顾伟刚

    手把手教你学DSP28335

    手把手教你学DSP28335,PDF格式,有助于随时随地可以学习知识。

    手把手教你ORACLE RMAN异地备份

    该教程旨在教你如何使用ORACLE RMAN实现异地备份,解决了由于数据量急剧增加、备份和恢复的困难问题。通过使用RMAN和EXP/IMP工具,用户可以实现本地数据库的异地备份,避免服务器空间不足的问题。 知识点一:异地...

    手把手教你用qt链接sqlserver数据库

    手把手教你用qt链接sqlserver数据库 具体教程参见https://blog.csdn.net/weixin_43935474/article/details/125619293?spm=1001.2014.3001.5501 系统:win10 sqlserver版本:sqlserver2014 qt版本:5.14.1 Qt Creator...

    手把手教你用SQL server创建企业人事管理系统(精华)2

    在本教程中,我们将深入探讨如何使用SQL Server创建一个高效且功能完善的企业人事管理系统。SQL Server作为一款强大的关系型数据库管理系统,是构建此类系统的基础,它提供了数据存储、查询优化、安全性和高可用性等...

Global site tag (gtag.js) - Google Analytics