SQL进阶技巧:非等值连接--单向近距离匹配

目录

[0 场景描述](#0 场景描述)

[1 数据准备](#1 数据准备)

[2 问题分析](#2 问题分析)

​编辑

​编辑

[3 小结](#3 小结)

数字化建设通关指南


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 7

10 11

1 数据准备

sql 复制代码
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()

sql 复制代码
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 的值则为最终结果

sql 复制代码
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)数字化建设当中遇到难题解决思路及问题思考。

我的专栏具体链接如下:

数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

相关推荐
远航计算机7 小时前
收录从分钟级变 3 到 7 天,抢首发为什么失效了
大数据·人工智能·爬虫·chatgpt·aigc·1024程序员节
CRMEB系统商城7 小时前
服装连锁的导购分销与企微私域
java·大数据·开发语言·人工智能·小程序·php·1024程序员节
有Li8 小时前
主动脉瘤的最佳风险重新分类:断层增强CT与二维经胸超声心动图对比研究文献速递/医学影像的几何测量
大数据·人工智能·深度学习·机器学习·医学生
2601_967979128 小时前
教培机构数字化系统 2026 排课管理与运营融合分析
数据分析·教培机构·数字化系统·排课管理·运营融合
Maynor9968 小时前
免费 Cloudflare 只有 10 个 D1?满了之后的「穷鬼打法」:表前缀复用同一个库
数据库·后端·云计算·cloudflare
冰暮流星8 小时前
mysql之索引设计的原则
数据库·mysql·1024程序员节
昵称画16 小时前
交接班记录电子化:三班之间的信息不漏
开发语言·数据库·人工智能·低代码·php
缓慢更新17 小时前
审批的加签与会签:多人意见怎么合
android·java·数据库·低代码·rxjava
跨境联盟18 小时前
大健康实体如何搭建产品差异化:对比普通营养品与合规跨境膳食补充剂服务模式
数据库·ai·健康医疗·健康管理·精准营养
有想法的py工程师18 小时前
PostgreSQL EXPLAIN中的Cost模型分析(random_page_cost参数):优化器眼中的代价世界与执行计划生成
数据库·postgresql