我有三栏a,b,c我想在' c'中填写真或假。列如果' b'的值低于或高于10%的一列' a'栏............ 实际上,我想更新专栏' b'如果值最接近列a
a | b | c
100 | 90 | true
100 | 110 | true
100 | 88 | false
我想在PostgreSQL中生成一个查询
答案 0 :(得分:2)
我想你可以试试这个:
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;
答案 1 :(得分:0)
你想知道是否
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;
(这些公式仅适用于正值。如果您的表格还包含负值,则必须调整它们。)