SQL“Count(Distinct ...)”返回1比实际数据显示少?

时间:2013-05-10 22:55:56

标签: sql count distinct

我有一些似乎没有正确计算的数据。当我查看原始数据时,我在给定列中看到5个不同的值,但是当我运行“Count(Distinct ColA)”时,它会报告4.对于我正在分组的所有类别,这也是如此,而不仅仅是一。例如。当有3时,列中的第2个值报告2,当有2时,第3个值报告1,等等。

表A:ID,类型

表B:ID_FK,WorkID,日期

以下是我的查询摘要:

SELECT COUNT (DISTINCT B.ID_FK), A.Type
FROM A INNER JOIN B ON B.ID_FK = A.ID
WHERE Date > 5/1/2013 and Date < 5/2/2013
GROUP BY Type
ORDER BY Type

结果的片段:

4|Business
2|Design
2|Developer

以下是我的数据示例,未汇总。管道是分离器;我刚刚删除了上面查询的'COUNT ...'和'GROUP BY ...'部分,以获取此信息:

4507|Business
4515|Business
7882|Business
7889|Business
7889|Business
8004|Business
4761|Design
5594|Design
5594|Design
5594|Design
7736|Design
7736|Design
7736|Design
3132|Developer
3132|Developer
3132|Developer
4826|Developer
5403|Developer

从数据中可以看出,商业应该是5,而不是4,等等。至少这是我的眼睛告诉我的。 :)

我使用它的内部ExecuteSQL调用在FileMaker 12解决方案中运行它。不过,请不要太担心:代码应该和其他任何代码一样。 :)

任何帮助都将不胜感激。

谢谢, Ĵ

2 个答案:

答案 0 :(得分:1)

尝试使用子查询:

SELECT COUNT(*), Type
FROM (SELECT DISTINCT B.ID_FK, A.Type Type
      FROM A
      INNER JOIN B ON B.ID_FK = A.ID
      WHERE Date > 5/1/2013 and Date < 5/2/2013) x
GROUP BY Type
ORDER BY Type

答案 1 :(得分:1)

这可能是FileMaker问题,你在FileMaker论坛上看过this post吗?它描述了相同的问题(计数明显小于1),其中11V3在03/2012回到插件,然后updated在12/203与ExecuteSQL有12v3相同的问题。在任何一种情况下似乎都没有得到解决。

如果在连接表上存在任何参照完整性约束,或者如果您可以获得查询执行计划,则可能会发现其执行查询的方式与预期不同。不确定FileMaker是否可以这样做。

我喜欢Barmar的建议,它会排序两次。

如果您正在处理错误,通过构建查询以使它们在不同时间发生来指导COUNT DISTINCT,Join和/或Group By可能会解决它:

SELECT COUNT (DISTINCT x.ID), x.Type
FROM (SELECT A.ID ID, A.Type Type
        FROM A
       INNER JOIN B ON B.ID_FK = A.ID
       WHERE B.Date > 5/1/2013 and B.Date < 5/2/2013) x
GROUP BY Type
ORDER BY Type

您也可以尝试将A.ID_FK替换为A.ID,后者知道它适用的上下文,例如:    SELECT COUNT(DISTINCT A.ID),A。Type