MySQL实现漏斗场景下汇总行与首行取自身计数的反向累积和查询
MySQL 业务阶段反向累积和计算调整需求
需求说明
- 操作对象为
descartados表,该表存储全量流失客户及其对应流失发生的业务阶段,配套已验证的测试区间插入数据 - 表结构:
stage(varchar(15)类型,记录流失对应的业务阶段)、date(datetime类型,记录流失事件发生时间) - 计算目标:按各业务阶段维度统计流失数据,输出反向累积和,且计算逻辑需跳过结果集最前方的两行。
现有查询语句
SELECT IF(GROUPING(descartados.stage), "Total", descartados.stage) AS Estagio, COUNT(*) as Contagem, SUM(COUNT(*)) OVER (ORDER by FIELD(Estagio, "Qualificados", "Agendados", "Filtro 2", "Filtro 1", "Entrada", "Total")) AS "Funil de Entrada" FROM descartados WHERE descartados.date BETWEEN '2021-01-01' AND '2021-01-31' GROUP BY descartados.stage WITH ROLLUP ORDER BY FIELD(Estagio, "Total", "Entrada", "Filtro 1", "Filtro 2", "Agendados", "Qualificados")
现存问题
当前查询输出结果不符合预期:
- Total 汇总行的
Funil de Entrada值为56 - Entrada 阶段行的
Funil de Entrada值为28
预期计算规则
调整后的计算逻辑需要满足:
- Total 汇总行的
Funil de Entrada值等于自身Contagem列的统计值28 - Entrada 阶段行的
Funil de Entrada值等于自身Contagem列的统计值16 - 从Filtro 1阶段开始,保留原有反向累积的计算逻辑,不再单独取自身计数值
此前已尝试引入LAG函数调整计算逻辑,未实现目标效果,需要可落地的实现方案。
内容的提问来源于stack exchange,提问作者Artur Lunardi Di Fante
相关产品推荐
相关产品推荐

