Sql Postgres-DISTINCT ON是否优先选择列中的非空值?

Sql Postgres-DISTINCT ON是否优先选择列中的非空值?,sql,postgresql,Sql,Postgresql,如果我在两列上使用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 我希望能够选择DISTINCT ON(col1,col2)并获取col3不为空的行,除非DISTINC

如果我在两列上使用
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

我希望能够
选择DISTINCT ON(col1,col2)
并获取
col3
不为空的行,除非
DISTINCT ON(col1,col2)
没有
col3
不为空的行。

它完全基于您的
订购方式。如果您想选择非空的行,只需在您的订单中包括:

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)

选择DISTINCT ON(第1列、第2列)。。。ORDER BY col1、col2、col3 ASC NULLS LAST

你能用预期结果更新问题吗?尽管不需要有严格的预期结果。它可以是distinct col1,col2的任意组合,只要col3对该distinct col1,col2有任何非空值,它将返回一行而不带空值。您当前的解释让3个人以三种不同的方式思考。听起来您在询问
distinct ON
,这与
distinct
不同。您可能需要添加一些大写和/或反勾号以使其更加明确。我已经得到了下面有效的答案,但我编辑了该问题只是为了更清楚地表明我正在使用DISTINCT ON。