我在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或类似的值。
非常感谢您。
答案 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