快速体验

  1. 打开 InsCode(快马)平台 https://www.inscode.net
  2. 输入框内输入如下内容:
    请创建电商数据分析场景下的SQL示例集,包含:1)用户订单量排名 2)商品销量周榜 3)用户最近一次购买时间标记 4)页面访问时长TOP10 5)复购用户识别。每个案例都要使用rownumber()over()函数,要求有完整SQL和中文注释,数据表结构需合理设计。
  3. 点击'项目生成'按钮,等待项目生成完整后预览效果

示例图片

最近在做电商数据分析时,发现SQL窗口函数中的rownumber()over()真是个神器。今天就用5个真实场景案例,分享这个函数如何帮我们解决实际问题。

1. 用户订单量排名

电商运营经常需要找出消费大户。假设有订单表orders(user_id, order_id, amount, create_time),我们可以这样统计用户下单量排名:

-- 按用户ID分组计算订单量并排名
SELECT 
    user_id,
    COUNT(order_id) AS order_count,
    ROW_NUMBER() OVER(ORDER BY COUNT(order_id) DESC) AS rank
FROM 
    orders
GROUP BY 
    user_id

这个查询会生成每个用户的订单量排行榜,运营团队可以针对排名靠前的用户设计VIP服务。

2. 商品销量周榜

商品表products和订单明细表order_items联合查询时,用窗口函数可以轻松生成周销量排行榜:

-- 统计上周各商品销量排名
SELECT 
    p.product_name,
    SUM(oi.quantity) AS weekly_sales,
    ROW_NUMBER() OVER(ORDER BY SUM(oi.quantity) DESC) AS rank
FROM 
    order_items oi
JOIN 
    products p ON oi.product_id = p.product_id
WHERE 
    oi.create_time BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY) AND CURRENT_DATE
GROUP BY 
    p.product_name

市场部门可以根据这个榜单调整首页推荐商品。

3. 标记用户最近一次购买时间

用户行为分析中,识别用户最近活跃时间很重要。通过以下查询可以标记每个用户的最新订单:

-- 为每个用户标记最近一次购买记录
SELECT 
    user_id,
    order_id,
    create_time,
    ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY create_time DESC) AS recency_flag
FROM 
    orders

其中recency_flag=1的就是该用户最近一次购买记录,可以用于RFM模型中的R值计算。

4. 页面访问时长TOP10

分析用户行为日志表user_logs时,找出停留时间最长的页面有助于优化用户体验:

-- 找出平均停留时间最长的10个页面
WITH page_stats AS (
    SELECT 
        page_url,
        AVG(stay_duration) AS avg_duration
    FROM 
        user_logs
    GROUP BY 
        page_url
)
SELECT 
    page_url,
    avg_duration,
    ROW_NUMBER() OVER(ORDER BY avg_duration DESC) AS duration_rank
FROM 
    page_stats
LIMIT 10

产品团队可以重点优化这些页面的内容质量。

5. 识别复购用户

复购用户是电商的重要资产,通过以下查询可以找出购买过2次及以上的用户:

-- 识别复购用户(购买≥2次)
WITH user_order_counts AS (
    SELECT 
        user_id,
        COUNT(*) AS purchase_count
    FROM 
        orders
    GROUP BY 
        user_id
    HAVING 
        COUNT(*) >= 2
)
SELECT 
    user_id,
    purchase_count,
    ROW_NUMBER() OVER(ORDER BY purchase_count DESC) AS loyalty_rank
FROM 
    user_order_counts

这个结果可以帮助CRM系统制定用户召回策略。

在实际工作中,我发现InsCode(快马)平台的SQL编辑器特别适合快速验证这类分析查询,它的智能提示和实时结果展示让数据分析效率提升不少。特别是处理大数据量时,平台的计算资源可以省去本地环境配置的麻烦。

示例图片

这些案例只是rownumber()over()函数的冰山一角,在实际业务中还有更多创新用法等待发掘。建议大家在分析需求时多思考"这个场景是否需要排序或分组排名",往往就能找到窗口函数的用武之地。

快速体验

  1. 打开 InsCode(快马)平台 https://www.inscode.net
  2. 输入框内输入如下内容:
    请创建电商数据分析场景下的SQL示例集,包含:1)用户订单量排名 2)商品销量周榜 3)用户最近一次购买时间标记 4)页面访问时长TOP10 5)复购用户识别。每个案例都要使用rownumber()over()函数,要求有完整SQL和中文注释,数据表结构需合理设计。
  3. 点击'项目生成'按钮,等待项目生成完整后预览效果
Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐