比率指标的计算,当类型字段选某个值时,基于它做聚合在除;当类型字段为空时,则基于全部做聚合再除

有这些字段,天-类型字段(x,y,z三个值)-实际值-预计值,比率是聚合在除,比如聚合天到月,类型字段选x,则比率是sum(实际值)/sum(预计值),但是当不选类型字段时,则应该是值聚合月,这个SQL应该怎么写?下面这个是针对必选某个类型时

select 

substring(dates,1,7)  mon

,category

,sum(problem_cnt)  problem_cnt

,sum(problem_cnt)/sum(total_cnt)  '比率'

from table_x

where 1=1 ${if(len(para) == 0,"","and category = '" + para+ "'")}

group by 1,2

FineReport king9901 发布于 2023-8-17 09:59
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
坚定的小帆薯Lv6高级互助
发布于2023-8-17 10:03(编辑于 2023-8-17 10:10)

没有很理解,

是否是按照条件聚合对应维度的数据吧

没有条件则聚合到月;有条件则不需要月的聚合?

实现肯定可以的,还是看你具体写法,如下

①直接按条件写两个SQL

${if(条件1,"select * from a","select * from b")}

②按照条件写两个字段

select if(${para}=1,列1,列2) as 维度,sum(a) as a from 表 group by if(${para}=1,列1,列2) 

  • king9901 king9901(提问者) 选择了类型字段的某个值,算比率是按照月-类型x去聚合算比率,这样得到的是x的指标比率;没有选择类型字段,则算比率就是只按照月去聚合来算,这样得到的是xyz三种类型的总比率。
    2023-08-17 10:11 
  • 坚定的小帆薯 坚定的小帆薯 回复 king9901(提问者) 虽然这个能实现,但是不太理解你的需求;相当于,你类型不选,就是XYZ的总数聚合算;如果你选X,就是X的总数聚合,那你category没有聚合的必要了吖
    2023-08-17 10:33 
  • 坚定的小帆薯 坚定的小帆薯 回复 king9901(提问者) 还是说,类型没选,需要按照XYZ对应的类型分别聚合
    2023-08-17 10:34 
最佳回答
0
king9901Lv4见习互助
发布于2023-8-17 11:08(编辑于 2023-8-17 11:09)

select 

substring(dates,1,7) mon

${if(len(para) == 0,"",",para")} 

,sum(problem_cnt)  problem_cnt

,sum(problem_cnt)/sum(total_cnt) as '比率'

from test

where 1=1 ${if(len(para) == 0,"","and category = '" + para + "'")}

group by mon ${if(len(model) == 0,"",",category")}

当参数para选某个值时,比率是聚合月份和类型值x来算的 

月份  类型  比率

1月   x     50%

2月   x     30%

当参数para不选值时,比率只聚合月份来算

月份  比率

1月   20% (这里其实就是把xyz三种类型合并了做比率计算)

最佳回答
0
兔子酱管理员初级互助
发布于2023-8-18 16:44

您好,我是社区管理员兔子酱,您的该采纳属于违规采纳,现予撤回。

自己采纳自己的前提:回答中没有正确的答案,可自己回答后采纳自己,并且需要详述答案,不能只是简单的“已解决”“自己解决了”,且回答不能与已有回答相同/相似;

若回答内容相同/相似,需按照回答时间先后的顺序进行采纳哦,否则就是违规哦~

另外,自己采纳自己不会有任何实质性的奖励,也就是说不会获得F币和贡献值的的奖励。

所以,还是建议楼主尽量按规定采纳认真回答的用户~

  • 2关注人数
  • 251浏览人数
  • 最后回答于:2023-8-18 16:44
    请选择关闭问题的原因
    确定 取消
    返回顶部