Postgres - DISTINCT ON是否优先考虑列中的非空值?

时间:2016-03-16 15:29:50

标签: sql postgresql

如果我在2列上使用DISTINCT ON,并且第三列可以具有空值,那么DISTINCT ON是否总是尝试返回第三列不为空的行,或者是直到ORDER BY

例如,使用此表:

col1    col2   col3
1       88     8
1       88     9
1       88     1
2       88     3 
2       88
3       88

我希望能够SELECT DISTINCT ON (col1, col2)并获取col3不为空的行,除非DISTINCT ON (col1, col2)没有col3不为空的行。< / p>

2 个答案:

答案 0 :(得分:8)

完全基于你ORDER BY的内容。如果您希望使用非NULL col3的行,请在订购时加入:

SELECT DISTINCT ON (col1, col2) ... ORDER BY col1, col2, col3 ASC NULLS LAST

答案 1 :(得分:0)

select distinct col1, col2, col3
from table t
where t.col3 is not null
 or not exists(select 1 from table tt 
    where tt.col1 = t.col1 and tt.col2 = t.col2 and tt.col3 is not NULL)