Postgres выполнить агрегацию для массива или string_agg - PullRequest
0 голосов
/ 05 марта 2020

У меня есть столбец, представляющий собой строку элементов, разделенных запятыми, например statuses= 'Initial,Initial,Completed,InProgress. И я, что сделать столбец состояния, как это:

CASE
    WHEN <all statuses are 'Initial'> THEN 'Initial'
    WHEN <all statuses are 'Completed'> THEN 'Completed'
    ELSE 'InProgress'
END AS status

Я попытался bool_and(string_to_array(statuses,',')='Initial'), который не компилируется. Есть предложения?

1 Ответ

1 голос
/ 05 марта 2020

Это можно сделать с помощью string_to_array() и оператора ALL:

case 
    when 'Initial'   = ALL(string_to_array(statuses, ',')) then 'Initial'
    when 'Completed' = ALL(string_to_array(statuses, ',')) then 'Completed'
    else 'InProgress'
end status

Демонстрация на DB Fiddle :

with t as (
    select 'Initial,Initial' statuses
    union all select 'Completed,Completed'
    union all select 'Initial,Completed,Other'
)
select 
    statuses,
    case 
        when 'Initial'   = ALL(string_to_array(statuses, ',')) then 'Initial'
        when 'Completed' = ALL(string_to_array(statuses, ',')) then 'Completed'
        else 'InProgress'
    end status
from t
statuses                | status    
:---------------------- | :---------
Initial,Initial         | Initial   
Completed,Completed     | Completed 
Initial,Completed,Other | InProgress
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...