我有一个使用以下语句创建的Postgres表.此表由另一个服务的数据转储填充.
CREATE TABLE data_table (
date date DEFAULT NULL,
dimension1 varchar(64) DEFAULT NULL,
dimension2 varchar(128) DEFAULT NULL
) TABLESPACE pg_default;
Run Code Online (Sandbox Code Playgroud)
我正在构建的ETL中的一个步骤是提取它们的唯一值dimension1并将它们插入另一个中间表中.但是,在某些测试中,我发现下面的2个命令不会返回相同的结果.我希望两者都返回相同的金额.与第二个命令相比,第一个命令返回的结果更多(1466行与1504行相比).
-- command 1
SELECT DISTINCT count(dimension1)
FROM data_table;
-- command 2
SELECT count(*)
FROM (SELECT DISTINCT ON (dimension1) dimension1
FROM data_table
GROUP BY dimension1) AS tmp_table;
Run Code Online (Sandbox Code Playgroud)
有什么明显的解释吗?作为解释的替代方案,是否有任何建议检查我应该做的数据?
编辑:以下查询都返回1504(与"简单"相同DISTINCT)
SELECT count(*)
FROM data_table WHERE dimension1 IS NOT NULL;
SELECT count(dimension1)
FROM data_table;
Run Code Online (Sandbox Code Playgroud)
谢谢!