Sql 选择一个文本值而不是另一个文本值

Sql 选择一个文本值而不是另一个文本值,sql,amazon-redshift,Sql,Amazon Redshift,我有一张类似的表格,如下所示: store manager status 1 tim good 2 anna good 3 ben bad 4 tim bad 5 tim ok 我的目标是获得如下所示的期望输出。我想显示每个经理的状态。顺序首选项为bad>ok

我有一张类似的表格,如下所示:

  store    manager      status         
    1       tim          good  
    2       anna         good
    3       ben          bad  
    4       tim          bad
    5       tim          ok  
我的目标是获得如下所示的期望输出。我想显示每个经理的状态。顺序首选项为
bad>ok>good
。因此,如果一个经理(tim)有3种不同的门店状态,它将以
bad
作为最终状态

    manager       status         
      tim          bad
      anna         good
      ben          bad  

我想不出一个创造性的解决方案来选择一个值而不是另一个值,因此如果有人能给我一个关于如何解决这个问题的建议/方法,我将不胜感激。

一种方法是使用条件逻辑进行聚合,如下所示:

select manager,
       coalesce(max(case when status = 'bad' then status end),
                max(case when status = 'ok' then status end),
                max(case when status = 'good' then status end)
               )
from t
group by manager;
您还可以使用窗口功能:

select t.*
from (select t.*,
             row_number() over (partition by manager
                                order by case status when 'bad'  then 1 when 'ok' then 2 when 'good' then 3 else 4 end
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

非常感谢。我根本没有想到COALESE(MAX())函数,这太棒了!