-1

我有一个INSERT查询,它从两个表中提取数据并将该数据插入到第三个表中。COUNT除了查询的一部分没有返回我期望的结果之外,一切似乎都运行良好。

此查询运行的第一组表是MIUsInGrid1000(行数 = 1)和Results1000(行数 = 24)。从查询部分返回的数字Count是 24,而不是像我预期的那样是 1。

下一组表是MIUsInGrid1000(行数 = 3)和Results1000 (行数 = 30)。从查询部分返回的数字Count是 90,而不是像我预期的那样是 3。

看来这两个计数的乘积是返回给我的,我不知道为什么会这样。如果我取出对Results表的引用,那么查询会按照我期望的方式工作。我认为我误解了其中至少一部分是如何工作的。有人可以解释为什么这不能像我预期的那样工作吗?

strQuery1 = "Insert Into MIUsInGridAvgs (NumberofMIUs, ProjRSSI, RealRSSI, CenterLat, CenterLong)  " & _
            "Select  Count(MIUsInGrid" & i & ".MIUID), Avg(MIUsInGrid" & i & ".ProjRSSI), Avg(MIUsInGrid" & i & ".RealRSSI), Avg(Results" & i & ".Latitude), Avg(Results" & i & ".Longitude) " & _
           "From MIUsInGrid" & i & ", Results" & i & " "
4

3 回答 3

3

对我来说,如果您要连接两个表,一个有 1 行,另一个有 24 行,这似乎是合乎逻辑的,那么就有可能获得 24 行的结果集。

我注意到您没有在 SQL 中包含 WHERE 子句(可能是为了简洁起见),但如果您没有在表之间进行交叉连接(或笛卡尔连接),这将提供意想不到的结果。

COUNT 函数将对数据库中的所有行进行计数,以确定有多少“不同”ID,您可以使用 Tomalak 提供的答案

于 2009-07-15T15:21:27.617 回答
2

这应该可以解决您的直接问题

Count(DISTINCT MIUsInGrid" & i & ".MIUID)

COUNT函数计算NULL值,而不是不同的值,除非你告诉它使用DISTINCT.

当两个表像你一样连接时(你构建一个笛卡尔积),那么结果行数是一个表中的行数乘以另一个表中的行数。

这使我怀疑您缺少连接条件。

除此之外,我发现令人困惑的是,您有许多按名称索引的明显相同的表。这无疑是数据库中的一个重大设计缺陷。

于 2009-07-15T15:19:16.013 回答
1

我通常解决这些问题的方法是先不使用任何聚合来查看我的结果集。然后,我开始添加聚合函数。

于 2009-07-15T15:21:55.557 回答