Postgresql

插入列名作為值

  • June 1, 2016

在 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

引用自:https://dba.stackexchange.com/questions/140087