【SQL中with的用法及代码经验分享】

这篇具有很好参考价值的文章主要介绍了【SQL中with的用法及代码经验分享】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SQL中with的用法及代码经验分享



前言

提示:这里可以添加本文要记录的大概内容:

注:WITH AS短语,也叫做子查询部分,可以称为独立查询模块,即定义一个SQL的独立模块后,该SQL模块可以被整个SQL语句所用到。有的时候,with as是为了提高SQL语句的可读性,减少关联太多表产生的冗余。


提示:以下是本篇文章正文内容,下面案例可供参考

一、with的用法

1.基本框架

代码如下(示例):

with xx_v1 as(
sql查询语句1
),
     xx_v2 as(
sql查询语句2
),
     xx_vn as(
sql查询语句n
)

注:如果需要关联多个表,最好在查询语句块时设置相同的以及所需多表关联的字段,方便后续汇总业务。

二、业务员各项业务办理SQL监控统计项目分享

1.口径说明

(1)需求口径说明
①主要汇总业务员多项业务办理量情况(目前重点关注其中五种)。
②区分业务员信息关联表和六个业务表。
(2)六个业务表名:业务表_VN(N=1-6)

2.业务员信息表字段(关联表_V1 )

城市 业务员名称 业务员工号
BRANCH OPR_NAM OPR_ID

3.Sql脚本编写

(1)变量赋值
v_day:办理日期:xxxx-xx-xx(例:20230223)
v_month:办理月份:xxxx-xx(例:202302)
注:由于该系统上有变量赋值组件,可通过设置参数自动赋值。
(2)sql代码

--数据处理

--分别统计各项业务当天当月业务

with t1 as(
    select a.branch,a.opr_id
    ,count(distinct case when b.CONT_ACCEPT_DT=${v_day} then b.USR_NBR end) as day_usr_xx1_cnt                     --统计当日销量且号码去重
    ,count(distinct case when substr(b.CONT_ACCEPT_DT,1,6)=${v_month} then b.USR_NBR end) as mon_usr_xx1_cnt      --统计当月销量且号码去重
      from 关联表_V1 a
      left join 业务表_V2  b
      on a.opr_id=b.EMP_ID and b.day=${v_day}
      group by a.branch,a.opr_id
),


t2 as(
    select a.branch,a.opr_id
    ,count(distinct case when b.accept_dt=${v_day} then b.usr_id end) as day_usr_xx2_cnt           --统计当日销量且号码去重
    ,count(distinct case when substr(b.accept_dt,1,6)=${v_month} then b.usr_id end) as mon_usr_xx2_cnt    --统计当月销量且号码去重
    from 关联表_V1 a
      left join (
          select distinct accept_dt,accept_opr_id,usr_id
          from (
              select a.USR_ID,a.BASS_PRDCT_CD,a.ACCEPT_DT,b.ACCEPT_OPR_ID
              from 业务表_V3 a
              join 业务表_V3   b   --自连接

              b on a.ORDER_ID=b.ORDER_ID and b.month=${v_month} 
              where a.month=${v_month} 
          ) a
          join (select bass_prdct_cd,row_number()over(partition by bass_prdct_cd order by stat_dt desc) rn    --由于该表无号码字段,以办理方案进行去重处理
                        from 业务表_V4
          ) b
          on a.bass_prdct_cd=b.bass_prdct_cd and b.rn=1
    ) b on a.opr_id=b.accept_opr_id
      group by a.branch,a.opr_id
),


t3 as(
    select a.branch,a.opr_id
    ,count(distinct case when b.ACPT_DT=${v_day} then b.USR_ID end) as day_usr_xx3_cnt   --统计当日销量且号码去重
    ,count(distinct case when substr(b.ACPT_DT,1,6)=${v_month} then b.USR_ID end) as mon_usr_xx3_cnt    --统计当月销量且号码去重
      from 关联表_V1 a
      left join 业务表_V5

      b on a.opr_id=b.STAFF_ID and b.month=${v_month} 
      group by a.branch,a.opr_id
),


t4 as(
    select a.branch,a.opr_id
    ,count(distinct case when b.accept_dt=${v_day} then b.usr_id end) as day_usr_xx4_cnt
    ,count(distinct case when substr(b.accept_dt,1,6)=${v_month} then b.usr_id end) as mon_usr_xx4_cnt
      from 关联表_V1 a
      left join 业务表_V6

      b on a.opr_id=b.accept_opr_id  and b.day=${v_day}
      group by a.branch,a.opr_id
),


t5 as(
    select a.branch,a.opr_id
    ,count(distinct case when b.innet_dt=${v_day} then b.usr_nbr end) as day_usr_xx5_cnt
    ,count(distinct case when substr(b.innet_dt,1,6)= ${v_month}  then b.usr_nbr end) as mon_usr_xx5_cnt
    from 关联表_V1 a
    left join
    (
      select
      usr_nbr,  
      innet_dt,
      INNET_MO,
      OPR_STAFF_ID
      from
      业务表_V7
      where INNET_MO=${v_month} 
     ) b
    ON
    a.OPR_ID=b.OPR_STAFF_ID
    GROUP BY
    a.BRANCH,a.OPR_ID
 )


--数据入库
insert overwrite table SCB_A_REF_HSH_OPR_ID_V2 partition(day=${v_day})
select 
    a.branch,a.opr_nam,a.opr_id
    ,b1.day_usr_xx1_cnt,b2.day_usr_xx2_cnt,b3.day_usr_xx3_cnt,b4.day_usr_xx4_cnt,b5.day_usr_xx5_cnt
    ,(b1.day_usr_xx1_cnt+b2.day_usr_xx2_cnt+b3.day_usr_xx3_cnt+b4.day_usr_xx4_cnt+b5.day_usr_xx5_cnt) as day_usr_all_cnt
    ,b1.mon_usr_xx1_cnt,b2.mon_usr_xx2_cnt,b3.mon_usr_xx3_cnt,b4.mon_usr_xx4_cnt,b5.mon_usr_xx5_cnt
    ,(b1.mon_usr_xx1_cnt+b2.mon_usr_xx2_cnt+b3.mon_usr_xx3_cnt+b4.mon_usr_xx4_cnt+b5.mon_usr_xx5_cnt) as mon_usr_all_cnt
from 关联表_V1 a
left join t1 b1 on a.opr_id = b1.opr_id
left join t2 b2 on a.opr_id = b2.opr_id
left join t3 b3 on a.opr_id = b3.opr_id
left join t4 b4 on a.opr_id = b4.opr_id 
left join t5 b5 on a.opr_id = b5.opr_id 
where a.opr_id is not null and a.opr_id<>''
;

--最后在系统中配置各种组件,让程序自动扫描管理的业务表,如若该天各个业务表数据到达,则自动运行并推送执行内容。

总结

提示:这里对文章进行总结:

①with as的好处是增加了sql的易读性,如果业务中涉及到多个子连接,通过区分各个语句块,结构会更清晰。
②更重要的是:这是各个独立语句,可以做到“一次运行,多次使用”,根据需求提取主要业务数据,来提高的代码的运行效率,达到程序执行的效率。文章来源地址https://www.toymoban.com/news/detail-451988.html

到了这里,关于【SQL中with的用法及代码经验分享】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023华为OD面试手撕代码经验分享

    我们先来看下这个同学的面试经历吧,非常有借鉴的意义。 【22届考研渣渣的od求职之旅,推荐一下两个人,德科hr和牛客的老哥】 \\\"*********\\\",hr给了机会吧,一开始我都没想到od这边。 还有我关注里面的老哥,问了一些问题。 -------------分割线----------------- 1-   4.14被捞:某

    2024年02月16日
    浏览(33)
  • 【经验分享】使用Keil5烧录代码遇到的问题及解决方法

    目录 一. 前言 二. 所遇问题及解决方法         1. 首先最基本的Options for target​编辑的设置不用多说,下载器根据自己所使用的类型进行选择。(我使用的是CMSIS-DAP)         2 .第二种可能出现的问题如下(SWD/JTAG Communication Failure):         3 .第三种可能出现的问题如

    2024年02月05日
    浏览(277)
  • 通用的改进遗传算法求解带约束的优化问题(MATLAB代码精讲、实际工程经验分享)

    在对多约束、非线性问题的求解上,传统线性规划等方法往往无法有效求解(求解时间过长、无法处理非线性约束等。 进化算法是一类强有力的工具,已经在多个领域有了较为成功的应用。然而,在利用遗传算法、粒子群等等进化算法求解实际的优化问题时,还存在许多困难

    2023年04月19日
    浏览(77)
  • 【学习经验分享NO.16】超全代码-python画Sigmoid,ReLU,Tanh等十多种激活函数曲线及其梯度曲线(持续更新)

    激活函数是一种特殊的非线性函数,它能够在神经网络中使用,其作用是将输入信号转化成输出信号。它将神经元中的输入信号转换为一个有意义的输出,从而使得神经网络能够学习和识别复杂的模式。常用的激活函数有 Sigmoid、ReLU、Leaky ReLU 和 ELU 等。大论文理论部分需要介

    2023年04月08日
    浏览(53)
  • 【实例】POSTGRE SQL如何用age函数实现两个日期之间的差值计算用法及代码示例

    【实例】POSTGRE SQL如何用age函数实现两个日期之间的差值计算用法及代码示例 工作中遇到需要计算两个日期之间的月份差值、天数差值,百度到的众多内容自己通过实践整理后,将最终的计算结果分享给大家 例: 用到的函数:age(end_date,start_date) age函数常用来计算年龄,计算

    2024年02月04日
    浏览(62)
  • 【CSDN快速获得铁粉小经验】厉昱辰的经验分享

     如何快速的涨粉呢?今天将带领大家一起涨粉喽🥰🥰🥳🥳 官方算法进行最低阅读量过滤,阅读量太低的直接不参与热榜计算,刚创建的文章应该在其他渠道有一些冷启动的过程。但是阅读量是一个容易被刷的数据,该数据并不参与后续计算。所以新写的文章要快速上热榜

    2024年02月06日
    浏览(38)
  • 双非本科求职经验分享

    历时半个月时间,终于找到了一份.net开发的工作。 双非本科。。。 我手机下载了 应届生求职 不常用 Boss直聘 常用 前程无忧 不常用 智联招聘 常用 猎聘 不常用 拉勾招聘 不常用 最常用的是Boss直聘,最后也是在Boss直聘上找到的工作,然后其次是智联招聘。 首先来讲讲Boss直

    2024年02月08日
    浏览(45)
  • 工具:Copilot实战经验分享

    在人工智能(AI)和机器学习(ML)领域,Copilot已经成为一个备受瞩目的工具。它是由微软和OpenAI联合开发的,以帮助开发者更高效地完成编程任务。在这篇文章中,我将分享一些关于Copilot的实战经验,以及如何利用它来提高编程效率。 Copilot是一个基于代码生成器的AI助手,

    2024年02月04日
    浏览(62)
  • MySql优化经验分享

    我们怎么查看MySQL当前有多少个连接? 可以用show status命令,模糊匹配Thread, Show global status like \\\"Thread%\\\" show global variables like \\\'wait timeout\\\';—非交互式超时时间,如JDBC程序 show global variables like \\\'interactive timeout\\\';\\\"交互式超时时间,如数据库工具默认都是28800秒,8小时。 既然连接消

    2024年02月05日
    浏览(33)
  • 大数据面试经验分享

    一、简历部分 ​ 首先,无论什么样的简历应当包含核心四个部分,分别为基本信息、技术栈、工作经历、项目经历。 1、基本信息: ​ 姓名、性别、年龄、联系方式、学历信息。例:张三、男、25、123123、本科 2、技术栈: ​ 编程语言(java、python、scala),数据库(mysql、

    2023年04月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包