Sql 如何解释SELECT DISTINCT中的计数差异?
我甚至不认为这是一个SQL问题,我只是在逻辑上挣扎,可能会有一段愚蠢的时间 我正在尝试查找表Sql 如何解释SELECT DISTINCT中的计数差异?,sql,postgresql,duplicates,Sql,Postgresql,Duplicates,我甚至不认为这是一个SQL问题,我只是在逻辑上挣扎,可能会有一段愚蠢的时间 我正在尝试查找表cms中存在但表cm中不存在的电子邮件地址数。我用的是postgres 10.4。两个表都包含一个varchar列“email” 这两个查询都返回18309的计数: SELECT COUNT(DISTINCT email) FROM cms; SELECT COUNT(email) FROM cms; 这两个查询都返回17949的计数: SELECT COUNT(DISTINCT email) FROM
cms
中存在但表cm
中不存在的电子邮件地址数。我用的是postgres 10.4。两个表都包含一个varchar列“email”
这两个查询都返回18309的计数:
SELECT COUNT(DISTINCT email) FROM cms;
SELECT COUNT(email) FROM cms;
这两个查询都返回17949的计数:
SELECT COUNT(DISTINCT email) FROM cm;
SELECT COUNT(email) FROM cm;
这意味着有。。。
18309-17949=在cms
中比cm
中多记录360条
然后,我将通过以下方式查询差异:
从cms左侧选择计数(cms.email)加入cm.email=cms.email,其中cm.email为空代码>
此查询返回369
差异从何而来
- 两个表本身都不包含重复记录
- 一个表比另一个表多360条记录
- 一个表中存在369条记录,而另一个表中不存在
那九张唱片是什么?没什么神秘的。每个表中都有电子邮件,而另一个表中没有
你有:
- 在
cms
中有18309封电子邮件,其中17940封(18309-369封)在cm
中
- 17949封电子邮件在
cm
中,其中17940封在cms
中
- 您有369个仅在cms中
- 您有9个仅在
cm
中
不仅大表中有不在小表中的电子邮件,而且大表中也缺少一些来自小表的电子邮件
您可以使用完全联接
来计算两个表中的孤立项:
select
count(*) filter(where cm.email is null) in_cms_but_not_in_cm, -- 369
count(*) filter(where cms.email is null) in_cm_but_not_in_cms -- 9
from cm
full join cms using(email)
where cm.email is null or cms.email is null
该列中有空值吗?有些记录不匹配。啊,当然。一个愚蠢的时刻。虽然现在我必须从一个商业角度来计算,记录是如何在表B中结束的,而不是通过表a,这应该是不可能的。是的。无论如何,非常感谢。