2017-06-06 110 views
1

我有三列a,b,c我想在'c'列中填写真或假,如果'b'列的值低于或等于'a'列的10%... ......... 其实,我想更新列“b”如果该值最接近列列所需的百分比

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

我要生成PostgreSQL中查询

+1

我不明白...... 90和88都是100%以上的10%,那么为什么有一个是真的,另一个是假的? –

+0

@Oto Shavadze:显然是语言问题。这大概是'a' +/- 10%。 –

+0

@ThorstenKettner - 如果是,则清除。 –

回答

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; 
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; 

(这些公式仅适用于正值。如果你的桌子也包含负值,你必须调整它们。)