SQL进阶技巧:非等值连接--单向近距离匹配
目录
0 场景描述
表 t_1 和表 t_2 通过 a 和 b 关联时,有相等的取相等的值匹配,不相等时每一 个 a 的值在 b 中找差值最小的来匹。
表 t_1:a 中无重复值
表 t_1:a 中无重复值
a 1 2 4 5 8 10
表 t_2:b 中无重复值 b 2 3 7 11 13
问题:单向最近匹配
输出结果如下所示:
注意:b 的值可能会被丢弃
a b
1 2
2 2
4 3
5 3
5 7
8 710 11
1 数据准备
create table t_1 as
(select stack(
6,
1,
2,
4,
5,
8,
10
) as (a));
create table t_2 as
(select stack(
5,
2,
3,
7,
11,
13
) as (b));
2 问题分析
步骤1:自关联,生成全量的数据集。并按照关联的结果集,按照abs(a-b)差值排序。注意差值有可能重复,因而采用dense_rank()
select a
, b
, abs(a-b) diff
, dense_rank() over (partition by a order by abs(a-b) )
from t_1,
t_2
步骤2:过滤出rn=1 的值则为最终结果
select a, b
from (select a
, b
, abs(a - b) diff
, dense_rank() over (partition by a order by abs(a - b) ) rn
from t_1,
t_2) t
where rn = 1
3 小结
本文分析了一种非等值连接--单向近距离匹配的方法及技巧、
数字化建设通关指南
专栏原价99,现在活动价39.9,按照阶梯式增长,直到恢复原价
专栏优势:
(1)一次收费持续更新。
(2)实战中总结的SQL技巧,帮助SQLBOY 在SQL语言上有质的飞越,无论你应对业务难题及面试都会游刃有余【全网唯一讲SQL实战技巧,方法独特】
SQL很简单,可你却写不好?每天一点点,收获不止一点点-CSDN博客
(3)实战中数仓建模技巧总结,让你认识不一样的数仓。【数据建模+业务建模,不一样的认知体系】(如果只懂数据建模而不懂业务建模,数仓体系认知是不全面的)
(4)数字化建设当中遇到难题解决思路及问题思考。
我的专栏具体链接如下:
原文地址:https://blog.csdn.net/godlovedaniel/article/details/144139456
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!