时间:2017-06-06 07:18:00

标签: sql postgresql

我有三栏a,b,c我想在' c'中填写真或假。列如果' b'的值低于或高于10%的一列' a'栏............ 实际上,我想更新专栏' b'如果值最接近列a

a   |  b   |  c
100 | 90   | true
100 | 110  | true
100 | 88   | false

我想在PostgreSQL中生成一个查询

2 个答案:

答案 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.9a * 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;

(这些公式仅适用于正值。如果您的表格还包含负值,则必须调整它们。)