You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于SQL Rank窗口按条件统计行数:统计各session_id支付步骤前访问的Essay URL数量

解决方案:统计支付步骤前的Essay访问数量

没问题,我来帮你搞定这个统计需求!要算出每个session在进入/payment_processing(支付步骤)前访问过的Essay类页面数量,用SQL就能轻松实现,我给你拆解下思路和代码:

核心思路

  1. 先定位每个session中第一次访问支付页面的顺序(rank)——因为如果一个session多次进入支付步骤,我们只需要统计第一次支付前的访问记录;
  2. 筛选出每个session中,访问顺序在第一次支付步骤之前,且URL路径以/essay/开头的记录;
  3. 按session分组,统计这些符合条件的记录数量。

完整SQL代码

-- 先获取每个session第一次访问支付页面的rank
WITH first_payment_rank AS (
    SELECT 
        session_id,
        MIN(rank) AS first_payment_rank
    FROM 
        your_table_name  -- 替换成你的实际表名
    WHERE 
        url_path = '/payment_processing'
    GROUP BY 
        session_id
)
-- 统计每个session在第一次支付前的Essay页面数量
SELECT 
    t.session_id,
    COUNT(t.url_path) AS essay_count_before_payment
FROM 
    your_table_name t
JOIN 
    first_payment_rank pr ON t.session_id = pr.session_id
WHERE 
    t.rank < pr.first_payment_rank
    AND t.url_path LIKE '/essay/%'
GROUP BY 
    t.session_id
ORDER BY 
    t.session_id;

代码解释

  • first_payment_rank 这个CTE(公共表表达式)专门用来抓取每个session第一次进入支付页面的顺序值,用MIN(rank)确保我们取的是最早的支付步骤;
  • 主查询把原表和这个CTE通过session_id关联,筛选出rank小于支付步骤rank、同时URL符合Essay路径规则的记录;
  • 最后用COUNT()和GROUP BY session_id得到每个session的统计结果。

验证示例数据

把你的示例数据代入这个代码:

  • session 001的第一次支付rank是6,之前只有/essay/e1(rank5)符合条件,所以计数为1;
  • session 002的第一次支付rank是9,之前有/essay/e3(rank7)和/essay/e4(rank8)符合条件,所以计数为2;
    完全匹配你期望的输出结果。

内容的提问来源于stack exchange,提问作者Sanath Sastry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:52:26