Sql中union all函数的使用场景和日常代码分享
·
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
union all函数的使用和日常代码分享`
注:union all是允许有重复值的话,如果查询的数据有重复值,可以使用union all,最后如果需要汇总数据可以对数据进行去重处理即可,如果无重复数据可以采用union。
`
一、union all 的基本用法
注:每一个查询语句块需输出相同的字段以及字段顺序,方便后续汇总以及程序运行的时候不容易出错。
二、union all 的基本用法
1.例如
代码如下(示例):
语句块1
union all
语句块2
union all
...
语句块n
2.分享日常使用的union all代码用法如下(示例):
(1)需求口径说明
①此业务区分8个方案,且同一个号码可以同时办理多个方案。
②统计前必须限制一个条件(SX_5G_TERM_IND=1)用来汇总特定业务数据。
③若同一个号码同时办理了多个方案,可以根据方案的价值来设置优先级,并进行去重处理,来保证高价值方案办理量能被精准统计。
(2)表字段(业务表名:XXX_D)
城市 | 号码 | 门店编码 | 特征码 | 门店名称 | 限定业务口径 | 门店类型 | 业务名称 | 办理月份 | 办理日期 |
---|---|---|---|---|---|---|---|---|---|
BRANCH | NUMBER | CHNL_CD | PATTERN | CHNL_NAM | SX_5G_TERM_IND | TERM_TYP | TERM_CONTR_NAM | MONTH | DAY |
(3)Sql脚本编写
①变量赋值
v_day:办理日期:xxxx-xx-xx(例:20230223)
v_month:办理月份:xxxx-xx
②脚本编写
-- 首先限定特定业务口径
drop table if exists qdzx_a_dr_sx_pers_term_contr_cnt_v1 purge;
create table qdzx_a_dr_sx_pers_term_contr_cnt_v1 as
select
branch,
NUMBER,
TERM_CONTR_TYP, --业务名称
CHNL_CD, --门店编码
PATTERM, --特征码
CHNL_NAM, --门店名称
SX_5G_TERM_IND, --限定业务口径
TERM_CONTR_NAM, --方案名称
ACCEPT_MO, --办理月份
CONT_ACCEPT_DT, --办理日期
month,
day
from
XXX_D
where SX_5G_TERM_IND=1 and TERM_TYP='xx' and month=${v_month};
-- 数据处理(设置每项业务进行优先级)
drop table if exists qdzx_a_dr_sx_pers_term_contr_cnt_v2 purge;
create table qdzx_a_dr_sx_pers_term_contr_cnt_v2 as
select
branch,
NUMBER,
TERM_CONTR_TYP, --业务名称
CHNL_CD, --门店编码
PATTERM, --特征码
CHNL_NAM, --门店名称
SX_5G_TERM_IND, --限定业务口径
TERM_CONTR_NAM, --方案名称
ACCEPT_MO, --办理月份
CONT_ACCEPT_DT, --办理日期
month,
day
case when TERM_CONTR_TYP='业务3' then '3'
when TERM_CONTR_TYP='业务6' then '6'
when TERM_CONTR_TYP='业务7' then '7'
when TERM_CONTR_TYP='业务8' then '8'
else '' end as priority --设置业务优先级
from qdzx_a_dr_sx_pers_term_contr_cnt_v1
where TERM_CONTR_TYP in('业务3','业务6','业务7','业务8') and CONT_ACCEPT_DT<=${v_day}
union all
select
branch,
NUMBER,
TERM_CONTR_TYP, --业务名称
CHNL_CD, --门店编码
PATTERM, --特征码
CHNL_NAM, --门店名称
SX_5G_TERM_IND, --限定业务口径
TERM_CONTR_NAM, --方案名称
ACCEPT_MO, --办理月份
CONT_ACCEPT_DT, --办理日期
month,
day
case when TERM_CONTR_TYP='业务1' then '1'
when TERM_CONTR_TYP='业务2' then '2'
when TERM_CONTR_TYP='业务4' then '4'
when TERM_CONTR_TYP='业务5' then '5'
else '' end as priority
from qdzx_a_dr_sx_pers_term_contr_cnt_v1
where TERM_CONTR_TYP in('业务1','业务2','业务3','业务4') and TERM_CONTR_NAM not like "%ZD_质押%" and TERM_CONTR_NAM not like "%ZD质押%" and CONT_ACCEPT_DT<=${v_day}
--处理其中业务中的某个小类
union all
select
branch,
NUMBER,
TERM_CONTR_TYP, --业务名称
CHNL_CD, --门店编码
PATTERM, --特征码
CHNL_NAM, --门店名称
SX_5G_TERM_IND, --限定业务口径
TERM_CONTR_NAM, --方案名称
ACCEPT_MO, --办理月份
CONT_ACCEPT_DT, --办理日期
month,
day
'1' as priority
from qdzx_a_dr_sx_pers_term_contr_cnt_v1
where TERM_CONTR_TYP in('业务1') and (TERM_CONTR_NAM like "%ZD_质押%" or TERM_CONTR_NAM like "%ZD质押%" ) and CONT_ACCEPT_DT<=${v_day}
;
-- 按方案大类优先级去重(保留唯一办理)
drop table if exists qdzx_a_dr_sx_pers_term_contr_cnt_v3 purge;
create table qdzx_a_dr_sx_pers_term_contr_cnt_v3 as
select a.*
from (
select
branch,
NUMBER,
TERM_CONTR_TYP, --业务名称
CHNL_CD, --门店编码
PATTERM, --特征码
CHNL_NAM, --门店名称
SX_5G_TERM_IND, --限定业务口径
TERM_CONTR_NAM, --方案名称
ACCEPT_MO, --办理月份
CONT_ACCEPT_DT, --办理日期
month,
day,
row_number() over(partition by NUMBER order by priority) rn --对方案大类进行优先级去重
from qdzx_a_dr_sx_pers_term_contr_cnt_v2
) a
where a.rn=1
;
-- 数据汇总入库
insert overwrite table TXB_QDZX_SX_PERS_TERM_CONTR_DTL_V1 partition(day=${v_day}) --设置分区条件
select
branch,
CHNL_CD, --门店编码
CHNL_NAM, --门店名称
term_chnl_signa, --特征码
count(distinct case when TERM_CONTR_TYP='业务1' and ACCEPT_MO=${v_month} then NUMBER end) as mon_usr_xx1_sx_cnt,
count(distinct case when TERM_CONTR_TYP='业务2' and ACCEPT_MO=${v_month} then NUMBER end) as mon_usr_xx2_sx_cnt,
count(distinct case when TERM_CONTR_TYP='业务3' and ACCEPT_MO=${v_month} then NUMBER end) as mon_usr_xx3_sx_cnt,
count(distinct case when TERM_CONTR_TYP='业务4' and ACCEPT_MO=${v_month} then NUMBER end) as mon_usr_xx4_sx_cnt,
count(distinct case when TERM_CONTR_TYP='业务5' and ACCEPT_MO=${v_month} then NUMBER end) as mon_usr_xx5_sx_cnt,
count(distinct case when TERM_CONTR_TYP='业务6' and ACCEPT_MO=${v_month} then NUMBER end) as mon_usr_xx6_sx_cnt,
count(distinct case when TERM_CONTR_TYP='业务7' and ACCEPT_MO=${v_month} then NUMBER end) as mon_usr_xx7_sx_cnt,
count(distinct case when TERM_CONTR_TYP='业务8' and ACCEPT_MO=${v_month} then NUMBER end) as mon_usr_xx8_sx_cnt,
count(distinct case when ACCEPT_MO=${v_month} then NUMBER end) as mon_usr_sx_cnt
from qdzx_a_dr_sx_pers_term_contr_cnt_v3
group by
branch,CHNL_CD,CHNL_NAM,term_chnl_signa;
-- 删除虚拟表
drop table if exists qdzx_a_dr_sx_pers_term_contr_cnt_v1 purge;
drop table if exists qdzx_a_dr_sx_pers_term_contr_cnt_v2 purge;
drop table if exists qdzx_a_dr_sx_pers_term_contr_cnt_v3 purge;
三、 总结
①union all内部的select语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
②每条SELECT语句中列的顺序必须相同。
推荐内容
阅读全文
AI总结
更多推荐
相关推荐
查看更多
llama_index

LlamaIndex(前身为GPT Index)是一个用于LLM应用程序的数据框架
halo

强大易用的开源建站工具。
freeCodeCamp

freeCodeCamp.org的开源代码库和课程。免费学习编程。
热门开源项目
活动日历
查看更多
直播时间 2025-04-25 15:00:00


直播时间 2025-04-23 19:00:00

GitTalk:国内首个微服务编排框架Juggle实战解析
直播时间 2025-04-22 18:31:56

字节AI 黑科技!从 Manus Agent 入门 Eino
直播时间 2025-04-09 14:34:18

樱花限定季|G-Star校园行&华中师范大学专场
直播时间 2025-04-07 14:51:20

樱花限定季|G-Star校园行&华中农业大学专场
所有评论(0)