用SQL伪代码理解DEF和EARLIER函数
earlier函数非常抽象,但是如果你会SQL,阅读以下伪代码,一定能快速掌握earlier函数。
基于https://help.fanruan.com/finebi/doc-view-1991.html的案例,以下是SQL伪代码。
--当前节点的客户数:DEF(SUM_AGG(${客户数}),${关键节点})
select
关键节点,
sum(客户数) as "当前节点的客户数"
from 汽车行业销售漏斗
group by 关键节点
--earlier就是组内升序排列,获取到当前的索引值
假设有数据5、1、3、4、2,
先排序成1、2、3、4、5,
earlier(3)=3
--排名:DEF(COUNTD_AGG(${关键节点})+1,${关键节点},${当前节点的客户数}>EARLIER(${当前节点的客户数}))
select
关键节点,
count(关键节点)+1 as "排名"
from 汽车行业销售漏斗
--假设当前客户数的大小排名第2,earlier(2)=2,相当于查到大于第2名的数据有1条,再加1,就得出排名第2
--注意【】里面的其实相当于是字段名
where 【当前节点的客户数】>earlier(当前节点的客户数)
group by 关键节点
--上一步的客户数:DEF(SUM_AGG(${客户数}),${关键节点},${排名}+1=EARLIER(${排名}))
select
关键节点,
count(关键节点) as "排名"
from 汽车行业销售漏斗
--假设当前客户数的大小排名第2,earlier(2)-1=1,相当于查到排名等于1的数据
--注意【】里面的其实相当于是字段名
where 【排名】=earlier(排名)-1
group by 关键节点