如果没有没有空值的列,如何选择空列值行

时间:2017-07-01 14:59:57

标签: sql postgresql

我有点奇怪的要求。将尝试解释一个简单的表格。

我有User表,这是记录。 enter image description here

现在我希望输出为enter image description here

我尝试了所有可能的解决方案,例如case/collate,但没有成功。基本上我希望所有用户都有他们的县,但如果国家不存在,请选择带有空值的国家。

2 个答案:

答案 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);

如果您希望每个名称有多行,则更合适。