2017-06-06 76 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; 

(這些公式僅適用於正值。如果你的桌子也包含負值,你必須調整它們。)