Postgresql
插入列名作為值
在 PostgreSQL 中考慮以下內容:
drop table test ; create table test (result1 text, red smallint, green smallint, blue smallint, results2 text) ; insert into test values ('red',1,2,3) ;
我想
results2
包含該值blue
,表示整數列的最大值出現在 column 中blue
。這可以通過UPDATE
稍後執行一個或一個函式來實現。如何將列名作為值插入?例如,將更新上面的行,使其包含:
'red', 1, 2, 3, 'blue'
整數列將沒有
NULL
值,並且整數之一將始終是最大的。(另見此處。)
您可以創建一個看起來像這樣的視圖:
create view test_view as select a,b,c,d, case when a = greatest(a,b,c,d) then 'a' when b = greatest(a,b,c,d) then 'b' when c = greatest(a,b,c,d) then 'c' when d = greatest(a,b,c,d) then 'd' end from test;
請注意,如果任何列包含
null
值,則上述內容將無法正常工作,因為greatest()
屆時將返回null
。如果你需要處理它,你需要使案例如:when a = greatest(coalesce(a,0),coalesce(b,0),coalesce(c,0),coalesce(d,0)) then 'a'
當兩列具有相同的最高值時,這將顯示“第一個”。所以
(2,2,4,4)
它會返回c