获取所有行中具有相同值的列

时间:2016-10-27 14:13:33

标签: sql postgresql

假设以下是我的表: -

COL1 | COl2 | COL3
-----|----- |-----
1    |  2   | 3
1    |  2   | 3
1    |  4   | 3

我希望每列中的记录在所有行中都有一个值。

对于上面的示例数据,我想要:

1,NULL,3 

结果。

3 个答案:

答案 0 :(得分:2)

你可以通过做一个不同的计数来做到这一点:

select 
  case when count(distinct col1) = 1 then min(col1) end as col1,
  case when count(distinct col2) = 1 then min(col2) end as col2,
  case when count(distinct col3) = 1 then min(col3) end as col3
from tbl

答案 1 :(得分:2)

select case when count(distinct col1) = 1 then max(col1) else null end,
       case when count(distinct col2) = 1 then max(col2) else null end,
       case when count(distinct col3) = 1 then max(col3) else null end
from table;

答案 2 :(得分:2)

您可以使用聚合和case。对于您的数据:

select (case when min(col1) = max(col1) then min(col1) end) as col1,
       (case when min(col2) = max(col2) then min(col2) end) as col2,
       (case when min(col3) = max(col3) then min(col3) end) as col3
from t;

我强烈建议您使用min()max()代替count(distinct)。后者往往表现不佳。