按月转季度分组时,条件去重统计:需全月满足还是单月满足?
问题解答
一、原语句的统计逻辑
原语句count(distinct case when trxcount>=2 then clubno end)是只要会员在季度内有任意1个月交易次数≥2,就会被统计。原因如下:
- 内部子查询按
store、clubno、monthname、fiscalquarter分组,会为每个会员的每个月份生成一条独立数据 - 只要某会员的任意一个月满足
trxcount>=2,case表达式就会返回该会员的clubno,外部查询的distinct clubno会去重后将该会员计入统计,完全不考虑其他月份的交易次数是否达标
二、修改SQL统计「季度内3个月交易次数都≥2」的会员
要实现这个需求,需要先统计每个会员在对应季度里满足trxcount>=2的月份数量,再筛选出数量等于3的会员进行计数。修改后的SQL如下:
select store, fiscalquarter, count(distinct clubno) as clubcount_all_months_meet from ( select store, clubno, fiscalquarter, -- 统计该会员在本季度中trxcount≥2的月份数 sum(case when trxcount >=2 then 1 else 0 end) as qualified_month_count from ( select store, clubno, monthname, fiscalquarter, count(distinct trxid) trxcount from server.saleslog sh left join server.datelookup dd on sh.dateid=dd.dateid where store in (439,237) and clubno is not null and fiscalquarter between '202201' and '202204' group by store,clubno, monthname,fiscalquarter ) a group by store,clubno,fiscalquarter -- 筛选出季度内所有3个月都达标的会员 having qualified_month_count = 3 ) b group by store,fiscalquarter order by store,fiscalquarter asc
三、关于月均/季度总交易次数方案的问题说明
你提到的「月均交易≥2次」或「季度总交易≥6次」的方案存在明显缺陷:
- 季度总交易≥6次可能是某一个月交易6次,另外两个月交易0次,完全不符合「每个月都≥2」的要求
- 月均≥2次本质和季度总≥6次逻辑一致,同样无法避免交易次数集中在个别月份的情况,会误统计不满足条件的会员
内容的提问来源于stack exchange,提问作者TheGroceryManCan
相关产品推荐
相关产品推荐

