DISTINCT 是否排除空值

luk*_*uke 6 sql ssms

使用 COUNT (DISTINCT fieldA) 时,是否排除计算 fieldA 中的 NULL 值

Mat*_*att 6

你的标题和叙述之间有两个问题。

DISTINCT 不会消除(排除)空值

然而

聚合函数忽略空值

正如其他人所提到的,如果您想计算所有非空 DISTINCT 值,请使用您提到的代码。

SELECT COUNT(DISTINCT columnName)
Run Code Online (Sandbox Code Playgroud)

如果您想将所有空值计算为另一个值,您可以使用 2 种方法中的一种。

1) 使用 COALESCE() 消除数据集中未表示的值的空值。例如

 SELECT COUNT(DISTINCT COALESCE(columnName,'|||||||||'))
Run Code Online (Sandbox Code Playgroud)

2)更确定的方式使用类似于戈登展示的条件聚合:

显示如何 distinct 不会消除空值:

CREATE TABLE DistinctTest (Col INT)
INSERT INTO DistinctTest (Col) VALUES (NULL),(1),(2),(3),(NULL)

SELECT DISTINCT  *
FROM
    DistinctTest
Run Code Online (Sandbox Code Playgroud)