分组并替换

时间:2018-11-01 19:50:53

标签: sql postgresql group-by aggregate-functions

我有一张这样的桌子:

groupe  subgroup    id  status
A          a       1    up
A          b       1    notdefined
A          c       1    null
A          a       2    up
A          b       2    up
A          c       2    up
A          a       3    up
A          b       3    up
A          c       3    null

我需要的是为每个组合(组ID)返回指定的状态 如果每个(group,id)都有一个状态未定义,则返回全局状态为未定义

如果所有状态=向上返回全局状态=向上 如果有,但未指定空返回值

所以结果应该是这样

Groupe      id      global_status
A            1       notdefined
A            2        up
A            3        notspecified

我在sqlfiddle上尝试过一些

2 个答案:

答案 0 :(得分:2)

您可以使用聚合和条件逻辑:

select groupe, id,
       (case when count(*) filter (where status = 'notdefined') > 0
             then 'notdefined'
             when count(*) filter (where status is null) > 0
             then 'notspecified'
             when max(status) = min(status) and min(status) = 'up'
             then 'up'
             else 'something else'
        end) as global_status
from t
group by groupe, id;

答案 1 :(得分:1)

使用boolean aggregates:

docker load

SqlFiddle.