1
我有三列a,b,c我想在'c'列中填写真或假,如果'b'列的值低于或等于'a'列的10%... ......... 其实,我想更新列“b”如果该值最接近列列所需的百分比
a | b | c
100 | 90 | true
100 | 110 | true
100 | 88 | false
我要生成PostgreSQL中查询
我有三列a,b,c我想在'c'列中填写真或假,如果'b'列的值低于或等于'a'列的10%... ......... 其实,我想更新列“b”如果该值最接近列列所需的百分比
a | b | c
100 | 90 | true
100 | 110 | true
100 | 88 | false
我要生成PostgreSQL中查询
我想你可以试试这个:
SELECT a, b, CASE WHEN ABS(a-b) <=0.1*a THEN TRUE ELSE FALSE END AS c
FROM yourtable;
产量:
a b c
1 100 90 True
2 100 110 True
3 100 88 False
关于更新B,您没有指定要使用B的值,但是你可以使用这样的事情:
UPDATE yourtable SET b = <your value>
WHERE ABS(a-b) <=0.1*a;
你想知道是否
b between a * 0.9 and a * 1.1
如果情况并非如此(或者我理解它),您希望将b设置为a * 0.9
或a * 1.1
:
update mytable
set b = case when b < a then a * 0.9 else a * 1.1 end
where b not between a * 0.9 and a * 1.1;
(这些公式仅适用于正值。如果你的桌子也包含负值,你必须调整它们。)
我不明白...... 90和88都是100%以上的10%,那么为什么有一个是真的,另一个是假的? –
@Oto Shavadze:显然是语言问题。这大概是'a' +/- 10%。 –
@ThorstenKettner - 如果是,则清除。 –