簡體   English   中英

基於多個條件的PostgreSQL更新列

[英]PostgreSQL Update Column based on Multiple Conditions

設置:

我使用PostgreSQL 9.1.2並具有一個基本表,如下所示,其中有4個二進制列可以采用值Y或N。這些列還主要包含Null值,在下表中將其表示為“-” :

    Binary Col 1   Binary Col 2   Binary Col 3   Binary Col 4   Summary Col
    ------------   ------------   ------------   ------------   -----------
1.       Y             N               -             N               1
2.       -             Y               N             Y               2
3.       N             N               -             N               0
4.       -             -               -             -               -
5.       Y             Y               Y             Y               4         

問題:

我想在表格中包括一個“ 摘要列” ,該基於這4個二進制列中出現的“ Y”數來填充。 我在上表中給出了5個示例條目,以展示所需的輸出。 需要注意的重要一件事是,我希望能夠區分諸如條目3(未觀察到“ Y”)的情況與諸如條目4(所有二進制列均為空)的情況。 這是一次性的工作,並且對於此重復列將如何影響表的事務處理速度,我沒有任何性能方面的擔憂。

我研究了很多PostgreSQL“更新表”示例,並在此處查看了手冊。 但是,我找不到具有多個條件的更新過程的示例,我認為這是這里所需要的。

還是我完全錯了,並且解決方案需要SQL函數或觸發器,任何提示或建議?

SQL小提琴

select
    c1, c2, c3, c4,
        (coalesce(c1, '') = 'Y')::integer
        + (coalesce(c2, '') = 'Y')::integer
        + (coalesce(c3, '') = 'Y')::integer
        + (coalesce(c4, '') = 'Y')::integer
    total_Y,
        (c1 is null)::integer
        + (c2 is null)::integer
        + (c3 is null)::integer
        + (c4 is null)::integer
    total_null
from t

巧合的是,sum函數具有您要查找的行為。 您只需要將值轉換為行:

UPDATE some_table SET summary = (SELECT SUM(v::int) FROM (VALUES (col1),(col2),(col3),(col4)) as x(v));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM