oracle中的with as子查询用法

在开发标签或者特征时,需要以基本对象为基础,做许多关联、计算或统计。

如果开发的特征数目少,涉及到的表也比较少,可能还可以写一大段关联一气呵成。然而,绝大多数情况下,随着标签涉及到基础数据表的膨胀,数据在关联中也不断膨胀,非常容易出问题。那么如何解决这个问题呢?

在oracle中,with as 的子查询就非常好用。

标签开发的基本思路是这样的:

  1. 确定标签领域:比如此次标签或特征是打在user上还是commodity上
  2. 确定主键:如果是对user开发特征,就要确保接下来所有的特征值能够关联到user上,比如都以user_id作为主键
  3. 确定主表:一般来说,如果是要对commodity开发标签,则以commodity基础信息表为主表,确定了主表也确定了数据记录数
  4. 开发多个子查询:在oracle开发标签的话,就可以用with as实现子查询,所有子查询结果均满足与标签领域同一主键
  5. 合并子查询结果:通过每个子查询的主键进行表关联,将各个标签结果合并起来
with 
tmp_subdealers as (
    select dealer_id,count(subdealer_id) as dlr_subdealers_cnt 
    from dms_biz.dt_bb_subdealers
    where sdf_status ='520005'
    group by dealer_id      --状态为正常
),     

tmp_service_stations as(
    select company_id, count(dealer_id) as dlr_stations_cnt
    from dms_biz.dt_bb_service_stations
    where biz_status = '100005' --状态正常
    group by company_id
)

with as进行多子表查询时,别名用法如上所示,每个子查询的本质是一张视图,数据只暂时存储在内存中,不会落表存储到数据库中。

如代码中所示,两个子查询生成别名为tmp_subdealers和tmp_service_stations的临时表,现在看来,这两个临时表里,分别只计算了一个指标值。在接下来就可以向正常表一样使用其中的标签值了。

left join tmp_subdealers on d1.dealer_id = tmp_subdealers.dealer_id
left join tmp_service_stations on d1.company_id = tmp_service_stations.company_id
left join tmp_dlr_cstm on d1.dealer_id = tmp_dlr_cstm.dealer_id

这样每个指标,或每几个相关的指标可以在一个子查询中实现,coding思路清晰,阅读和检查起来都非常方便。

👏👏👏再看看我们以前的文章😃😃😃
🌺 Excel中数据分析工具库-相关系数篇
🌺 干货,手把手教会你做相关性分析
🌺 5年数据分析路,小结。
🌺 用户细分及画像分析
🌺 K-近邻算法及实践

欢迎关注,微信公众号“数据分析师之家
扫描二维码 关注我们
💁提供职业规划、简历指导、面试辅导服务哦
QQ交流群:254674155
在这里插入图片描述

数据分析之家联合JEE RAY品牌为粉丝派发福利

在这里插入图片描述
添加粉丝福利派发官,领取粉丝福利哦

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值