跨sql列选择性地组合数据

跨sql列选择性地组合数据,sql,postgresql,Sql,Postgresql,我有一个5列的表。数据的特点是一行中的所有值都是相同的……但并非每列中都有一个值。例如 h1 h2 h3 h4 h5 1 1 1 2 2 2 4 4 4 8 8 21 21 我想创建一个列,列出每行中唯一的数字。输出将是: output 1 2 4 8 21 我怎么能这样做 select distinct coalesce(h1,coalesce(h2,coalesce(h3,coalesce(h4,h5)))) fro

我有一个5列的表。数据的特点是一行中的所有值都是相同的……但并非每列中都有一个值。例如

h1 h2 h3 h4 h5
1  1        1
   2  2     2 
4        4  4
8     8     
21 21  
我想创建一个列,列出每行中唯一的数字。输出将是:

output
1
2
4
8
21
我怎么能这样做

select distinct
coalesce(h1,coalesce(h2,coalesce(h3,coalesce(h4,h5))))
from your_tab
order by 1 
编辑:

distinct
是多余的,只需要一个
coalesce()

select coalesce(h1, h2, h3, h4, h5)
from your_tab
order by 1 ;
检查条件表达式,该表达式为每行的一组列返回单个最大值

SELECT GREATEST(h1,h2,h3,h4,h5)
FROM tableName
当然,您也可以使用LEAST()作为最小值


NULL值将被忽略,如果一行表达式中的所有列都是NULL,则返回NULL

如果一行中有不同的数字,例如
1、2、3
?这是一个非常模糊的问题。抱歉-我将尝试进一步澄清我们不能这样使用吗?:coalesce(h1、h2、h3、h4、h5)文档说明忽略了Null值,因此如果任何列具有非Null值,则此操作将起作用。。对于coalesce()函数也是如此。哎呀。Postgres通常在这类事情上遵循SQL标准,但在这种情况下并不遵循。所以这个答案在Postgres中适用。@GordonLinoff:
最大值
最小值
不是标准的SQL。至少,:
请注意,最大值和最小值不在SQL标准中,而是一个常见的扩展。其他一些数据库会在任何参数为NULL时使其返回NULL,而不是仅在所有参数都为NULL时才返回NULL。
忽略NULL(就像大多数聚合函数一样)似乎更有用。@GordonLinoff:什么标准?AIUI、
最大值
最小值
不是标准SQL。