gpt4 book ai didi

sqlite - SQlite基于与两个表的最接近差异定义列(vlookup)

转载 作者:行者123 更新时间:2023-12-03 19:46:31 25 4
gpt4 key购买 nike

我有两个表{示例数据-表A有几百行,表B有几千行}。我想用B1列和A2列之间的最小绝对差填充B2列-对应于A1列。 ... OR ...设置B2 = A1,其中abs(B1-A2)最接近零。

因此,在我的表格下面,第一行B1-A2 = 1.6-1.4 = 0.2,这是最小的差异,对应于A1中的0(下两行分别为1和2,尽管这种巧合是由于我缺乏创造力而不是实际的表格结构)。

表A

A1         A2
0 1.4
1 2.6
2 4.3


表B

B1         B2
1.6 []
2.7 []
4.4 []


或B2 = A1,其中abs(B1-A2)最接近零。我不知道如何使用SQLite定义它。我已经搜索了SO,但还没有找到这个问题的措词足够接近我的微薄SQLite技能来实现的目标。我所看到的最接近的是 SQLite - getting closest value,但这是一个表,只有一个选择而不是更新。

我知道大多数人都希望我提供一个答案作为起点,但是它们要么完全失败,要么给我一个有关尝试使用聚合函数(最小)的错误,因此我认为这对解决问题没有帮助(但是如果您很好奇,我为此已经花了2个小时了)。因此,我决定解决这个问题:SQLite是否可以执行此操作?任何帮助深表感谢!

B2 = A1,其中abs(B1-A2)最接近零。实际上,这是一个SQLite vlookup(Excel)样式的问题。

最佳答案

对于名为X的固定B1值,此查询将计算每个A记录的差值:

SELECT *,
abs(X - A2)
FROM A


为了获得最小值,我们可以使用MIN,但这只会计算差值本身。
要从同一记录中获取其他值,最好像这样使用ORDER BY,以便返回的第一条记录是差异最小的记录:

SELECT A1,
A2,
abs(X - A2)
FROM A
ORDER BY 3


如果设置为LIMIT,则仅返回第一条记录:

SELECT A1,
A2,
abs(X - A2)
FROM A
ORDER BY 3
LIMIT 1


现在,我们只需要 A1值,因此围绕此包装另一个查询:

SELECT A1
FROM (SELECT A1,
abs(X - A2)
FROM A
ORDER BY 2
LIMIT 1)


现在,我们可以将整个查询用作UPDATE的相关子查询,其中 X现在是当前记录中的 B1值:

UPDATE B
SET B2 = (SELECT A1
FROM (SELECT A1,
abs(B1 - A2)
FROM A
ORDER BY 2
LIMIT 1))

关于sqlite - SQlite基于与两个表的最接近差异定义列(vlookup),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21243710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com