Sql 如何根据postgres中其他列的值插入单行的文本列

Sql 如何根据postgres中其他列的值插入单行的文本列,sql,postgresql,group-by,sql-order-by,case,Sql,Postgresql,Group By,Sql Order By,Case,我想根据特定参数的值插入sigal行的文本结果 例如 表1 Id | status ____________ 23 | complete 24 | going on 34 | failed 56 | complete 现在在表1中,如果任何一个或多个条目的状态为“失败”,则我的查询结果应为: Result | tableName ___________________ Failed | Table1 Result | tableName ___________________ Going o

我想根据特定参数的值插入sigal行的文本结果

例如

表1

Id | status
____________
23 | complete
24 | going on
34 | failed
56 | complete
现在在表1中,如果任何一个或多个条目的状态为“失败”,则我的查询结果应为:

Result | tableName
___________________
Failed | Table1
Result | tableName
___________________
Going on | Table1
Result | tableName
___________________
Complete | Table1
如果任何一个或多个条目的状态为“正在进行”,且没有行的状态为“失败”,则我的查询结果应为:

Result | tableName
___________________
Failed | Table1
Result | tableName
___________________
Going on | Table1
Result | tableName
___________________
Complete | Table1
最后,如果状态列中的所有值均为“完成”,则结果应为:

Result | tableName
___________________
Failed | Table1
Result | tableName
___________________
Going on | Table1
Result | tableName
___________________
Complete | Table1
综上所述,查询结果基于“状态”列,优先级为:

1. Failed
2. Going on
3. Complete

有人能帮我吗?

我想您需要条件聚合:

select
    case
        when count(*) filter(where status = 'failed')   > 0 then 'failed'
        when count(*) filter(where status = 'going on') > 0 then 'going on'
        when count(*)                                   > 0  then 'complete'
    end result
from mytable
您还可以使用条件排序和行限制子句来执行此操作,这可能更有效:

select status
from mytable
order by 
    status = 'failed'   desc,
    status = 'going on' desc,
    status = 'complete' desc
limit 1