1

我有一些数据似乎计算不正确。当我查看原始数据时,我在给定列中看到 5 个不同的值,但是当我运行“计数(不同的 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

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

我使用它的内部 ExecuteSQL 调用在 FileMaker 12 解决方案中运行它。不过不要太担心:代码应该与几乎任何其他代码相同。:)

任何帮助,将不胜感激。

谢谢,J

4

2 回答 2

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
于 2013-05-10T23:53:02.417 回答
1

这可能是 FileMaker 问题,您在 FileMaker 论坛上看到过这个帖子吗?它在 03/2012 中使用插件描述了与 11V3 相同的问题(计数相差 1),然后在 11/2012 中使用 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 替换 B.ID_FK,谁知道它适用于什么上下文,例如:SELECT COUNT (DISTINCT A.ID), A.Type

于 2013-05-11T01:22:20.093 回答