| B山口|迪斯特| Dist |
| - -----|- -----| ------------ |
| 2|五十| 50 |
| 一个|一百| 100 |
| 4|一百| 100 |
| 三个|两百| 200 |
我想将列记录值与另一列记录值进行比较,并计算此类记录的差异。
| B山口|距离差异| Dist Difference |
| - -----|- -----| ------------ |
| 2|五十| 50 |
| 一个|五十| 50 |
| 4|一百| 100 |
| 三个|一百| 100 |
我尝试了下面的查询,但是我只能得到一个列值与另一个列值的匹配记录,但是我需要取两个记录的差值:
SELECT
a.*
FROM
table1 a
WHERE
EXISTS (
SELECT
1
FROM
table1 b
WHERE
a.Col A = b.Col B and a.Col B= b.Col A
)
and Col A <> Col B
3条答案
按热度按时间cfh9epnr1#
可以使用自联接:
其中,对于样本数据:
输出:
| COLB|距离差异| DIST_DIFFERENCE |
| - -----|- -----| ------------ |
| 一个|五十| 50 |
| 2|五十| 50 |
| 三个|一百| 100 |
| 4|一百| 100 |
如果你只想为每一对使用一个值,那么你可以使用
GREATEST
和LEAST
进行聚合:其输出:
| COLB|距离差异| DIST_DIFFERENCE |
| - -----|- -----| ------------ |
| 2|五十| 50 |
| 4|一百| 100 |
fiddle
vof42yt12#
计算值之间的差值 并创建具有此差异的附加列,则可以在SQL中使用JOIN子句和ABS(绝对值)函数。下面是完成此任务的示例查询:
查询说明:
该查询从表table1中选择列Cola和ColB,并计算这两个值之间的绝对差值 从表A和B的列dist的。
JOIN子句用于合并table1表中的行,其中a.Cola的值对应于b.ColB的值,a.ColB的值对应于b.Cola的值。
WHERE子句将筛选出.Cola与.colB不同的行,确保只获取列之间存在差异的记录。
查询结果将显示Diferenca_dist列,其中包含dist列值之间的差值 对于Cola和ColB列中的相应记录。
tjvv9vkg3#
其中一个选项是使用MODEL clause。当你需要多个行/列计算时,它非常方便。
然而,这个问题有点不清楚。这些行是成对的,我不确定是否希望第一个成对的行保留它的DIST值,并仅在第二个成对的行中计算差值。如果是这样的话,你可以像这样试试:
另一方面,如果您希望在两个配对行中计算相同的差异,请尝试以下代码:
提供的示例数据的结果是相同的,但如果将最后一行中的DIST值从200更改为199,则会看到差异。