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博客

相关推荐
大金SEO8 小时前
GEO启动的正确顺序:先做信源清理,再谈内容扩张
大数据·人工智能
普马萨特8 小时前
实体与位置关系的数据从哪里来:获取、治理与仍待解决的问题
网络·数据库
醉颜凉8 小时前
MySQL 8 忘记 root 密码?这两种方法帮你轻松解决
数据库·mysql·adb
RestCloud9 小时前
集成链路监控体系搭建:接口调用、数据流转与异常告警全覆盖
数据库·数据安全·ipaas·api管理·数据监控·集成平台·api 治理
IT毕设实战小研9 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
Capricorn19889 小时前
个人知识库接入大模型频现“幻觉引用”?排查 RAG 溯源失效问题,解析知芽构建可信第三大脑的底层架构
大数据·论文阅读·人工智能·笔记·架构·论文笔记
DeepAgent9 小时前
AI Agent 工程实践(35):我的 AI Engineering OS 最终架构
大数据·人工智能·agent
xxwl5859 小时前
MySQL 基础学习笔记
数据库·mysql
SKH.9 小时前
Linux软件编程(6)线程间通信
java·开发语言·数据库
Rain的Java大神之路9 小时前
PC版网站被狂刷怎么处理
java·数据库·redis·后端·mysql·web安全·运维开发