postgres与case的聚合

jm81lzqq  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(386)

我有一个some查询,它返回一个表“code1”(id-distinct)。

|---------------------|------------------|
|         id          |       status     |
|---------------------|------------------|
|          1          |         true     |
|---------------------|------------------|
|          2          |         true     |
|---------------------|------------------|
|          3          |         false    |
|---------------------|------------------|
|          3          |         true     |
|---------------------|------------------|
|          4          |         false    |
|---------------------|------------------|

根据数据。。我想得到下表(“代码2”)

|---------------------|------------------|
|     id              |     status       |
|---------------------|------------------|
|          1          |      include     |
|---------------------|------------------|
|          2          |      include     |
|---------------------|------------------|
|          3          |      partial     |
|---------------------|------------------|
|          4          |      exclude     |
|---------------------|------------------|

如果id重复,则状态为部分,否则状态=代码表1中的状态

t98cgbkg

t98cgbkg1#

如果我理解正确,请使用聚合:

select id,
       (case when min(status) = max(status) and min(status) then 'Include'
             when min(status) = max(status) and not min(status) then 'Exclude'
             else 'Partial'
        end) as status
from t
group by id;

或者,使用布尔聚合函数:

select id,
       (case when bool_and(status) then 'Include'
             when bool_or(status) then 'Partial'
             else 'Exclude'
        end) as status
from t
group by id;

相关问题