0- 描述
描述:表t23_1和表t23_2通过a和b关联时,有相等的取相等的值匹配,不相等时每一个a的值在b中找差值最小的来匹配。
t23_1和t23_2为两个班的成绩单,t23_1班的每个学生成绩在t23_2班中找出成绩最接近的成绩。
表t23_1:a中无重复值
a
1
2
4
5
8
10
表t23_2:b中无重复值
b
2
3
7
11
13
1- 问题一
描述:单向最近匹配
输出结果如下所示:
注意:b的值可能会被丢弃
a b
1 2
2 2
4 3
5 3
5 7
8 7
10 11
参考答案:
select
*
from
(
select
ttt1.a,
ttt1.b
from
(
select
tt1.a,
t23_2.b,
dense_rank() over(partition by tt1.a order by abs(tt1.a-t23_2.b)) as dr
from
(
select
t23_1.a
from t23_1
left join t23_2 on t23_1.a=t23_2.b
where t23_2.b is null
) tt1
cross join t23_2
) ttt1
where ttt1.dr=1
union all
select
t23_1.a,
t23_2.b
from t23_1
inner join t23_2 on t23_1.a=t23_2.b
) result_t
order by result_t.a;
此篇博客介绍了如何通过SQL查询实现t23_1班成绩表与t23_2表之间的单向最近匹配,确保每个t23_1班学生的成绩与t23_2班最接近的分数进行关联,即使b表中有缺失,也通过计算找到差距最小的匹配。
960

被折叠的 条评论
为什么被折叠?



