Postgres查询根据状态条件将多行合并为一行

问题描述

我有一个下面的数据示例

Col1 Col2 Status
a    ab   Failed
a    bc   Running
a    cd   Completed

我期望的输出

Col1 Status
a    Failed

即任何一个Subjob(Col2)失败,则Main作业应显示Failed

解决方法

一个选项使用distinct on和条件排序:

select distinct on (col1) col1,status
from mytable
order by 
    col1,case status
       when 'Failed'    then 0
       when 'Running'   then 1
       when 'Completed' then 2
    end

这将优先级设置为“失败”,然后是“正在运行”,然后是“已完成”。

您还可以使用布尔值进行排序,例如:

order by 
    col1,(status = 'Failed')    desc,(status = 'Running')   desc,(status = 'Completed') desc
,

我认为对您所提问题的最简单答案是:

select distinct col1,status
from t
where status = 'Failed';

这将返回所有失败的col1

如果您有其他问题,则应将其作为 new 问题提出。清楚地说明您的逻辑,并提供示例数据和所需结果,涵盖您需要交流的主要场景。