根据某些条件过滤postgres值

时间:2019-12-18 14:04:54

标签: sql postgresql

我在postgres 11上有一个postgresql表,其中有一列人和一列他们喜欢的航空公司。

Name | Airlines
----------------
Patrick | Delta
Patrick | United
Patrick | American
James   | Delta
Sophie  | United
Sophie  | American
John    | United 

我需要在一个表中提供值,如果某人在其首选航空公司中有Delta,则他们有Delta,否则他们会得到类似“其他航空公司”的期望结果

Name | Airlines
----------------
Patrick | Delta
James   | Delta
Sophie  | Other-Airlines
John    | Other-Airlines.

有没有一种方法可以轻松地将其过滤掉?我知道使用数字或字母值很容易使用min,max或类似的值。

非常感谢您。

1 个答案:

答案 0 :(得分:1)

您可以使用group by

select name,
       (case when count(*) filter (airline = 'Delta') > 0
             then 'Delta' else 'Other airline'
        end) as preferred
from t
group by name;

您也可以使用distinct on

select distinct on (name) name,
       (case when airline = 'Delta' then airline else 'Other airline'
        end) as preferred
from t
order by name, (airline = 'Delta') desc