查找 SQL 表之间的差异

Posted

技术标签:

【中文标题】查找 SQL 表之间的差异【英文标题】:Find difference between SQL tables 【发布时间】:2021-04-19 13:29:11 【问题描述】:

谁能帮我找出两个相似表之间的区别:

表 1:

表 2:

我需要绝对值的差异,如表 1 - table2 = 输出值

【问题讨论】:

预期结果是什么? 值需要显示为 table1.column1 - table2.column1 输出应该是值,就像我们在 excel 中使用两个字段一样 请使用相同的格式将预期结果添加到问题中。 请分享您的预期输出。 表格代表无序组的行。请指定您希望如何将第一个表中的行与第二个表中的行匹配。 【参考方案1】:

如果你想在 table1 和 table2 之间有花费、sv 和 bfe 的差异来匹配渠道和漏斗,你可以使用内连接。

select t1.channel,t1.funnelfunnel,(t1.spend-t2.spend),(t1.sv-t2.sv)sv,(t1.bfe-t2.bfe)bfe
from table1 t1 inner join table2 t2
on t1.channel=t2.channel and t1.funnel=t2.funnel

如果您希望 table1 中的所有行在从 table2 中减去匹配值后具有值,则可以使用左连接。

 select t1.channel,t1.funnelfunnel,(t1.spend-t2.spend),(t1.sv-t2.sv)sv,(t1.bfe-t2.bfe)bfe
    from table1 t1 left join table2 t2
    on t1.channel=t2.channel and t1.funnel=t2.funnel

【讨论】:

我认为这不是 OP 想要的,但我可能错了。 现在我也这么想。你很有可能是对的。 请告诉我。如果这不是您要查找的内容,请上传您想要的输出。【参考方案2】:

要求是找到完全匹配(交叉应用或内部连接)并绝对值并找到值的差异

将@tmp1 声明为表( 频道 varchar(10), 漏斗 varchar(2), 花费数字(18,2), sv int, bfe int);

将@tmp2 声明为表( 频道 varchar(10), 漏斗 varchar(2), 花费数字(18,2), sv int, bfe int); 插入@tmp1(频道、漏斗、支出、sv、bfe) 值('显示','UF',155629,89554,1669), ('显示','MF',85454,31534,475), ('显示','LF',106983,68324,867)

插入@tmp2(渠道、漏斗、支出、sv、bfe) 值('显示','MF',206622.17,38018,21443), ('显示','UF',68219.46,89561,1669), ('显示','LF',2297171.85,514779,59347)

select 
tmp1.funnel,
abs(tmp1.spend)-abs(tmp2.spend) spend,
abs(tmp1.sv)-abs(tmp2.sv) sv,
abs(tmp1.bfe)-abs(tmp2.bfe) bfe
from @tmp1 tmp1
join @tmp2 tmp2 on tmp1.funnel=tmp2.funnel

输出

UF  87409.54    -7  0
MF  -121168.17  -6484   -20968
LF  -2190188.85 -446455 -58480

【讨论】:

以上是关于查找 SQL 表之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

SQL:查找具有非唯一特征 ID 的两个表之间的差异?

在 MS Access 或 SQL Server 中查找 2 个表之间的差异

在 pyspark sql 中查找两个时间戳之间的差异

SQL查找上一行和当前行之间的差异

查找两个日期之间的差异 Oracle SQL

在 sql 中查找两个透视列之间的差异