如果我在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>
答案 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)