我有点奇怪的要求。将尝试解释一个简单的表格。
我尝试了所有可能的解决方案,例如case/collate
,但没有成功。基本上我希望所有用户都有他们的县,但如果国家不存在,请选择带有空值的国家。
答案 0 :(得分:1)
在大多数dbms中,NULL在GROUP BY中被视为未知值: 所以使用GROUP BY:
SELECT name,age,MAX(country) AS country
FROM table_a
GROUP BY name,age;
答案 1 :(得分:1)
在Postgres中,您可以使用distinct on
。我想这就是你想要的:
select distinct on (t.name) t.*
from t
order by name, ( (country is not null)::int ) desc;
如果您想要每name
行一行,这可能是最有效的方法。
另一种有效的方法是:
select t.*
from t
where t.country is not null
union all
select t.*
from t
where t.country is null and
not exists (select 1 from t t2 where t2.name = t.name and t2.county is not null);
如果您希望每个名称有多行,则更合适。