【发布时间】:2011-07-28 15:26:39
【问题描述】:
在做一些数据库工作时,我遇到了一个奇怪的问题。我正在尝试对特定人群使用 Access 中的内置平均函数。当我运行查询时,我得到的答案与我查找个人然后平均这些值时不同。有没有人注意到下面的 SQL 中有任何内容可以给出两个不同的答案?
使用平均函数:
SELECT DISTINCT tblKentuckyCounties.Appalachian, tblKentuckyCounties.Metro, Avg(Visits.admitNumUlcers) AS AvgOfadmitNumUlcers
FROM (tblKentuckyCounties INNER JOIN Person ON tblKentuckyCounties.ID = Person.County) INNER JOIN Visits ON Person.PersonID = Visits.PersonID
GROUP BY tblKentuckyCounties.Appalachian, tblKentuckyCounties.Metro
HAVING (((tblKentuckyCounties.Appalachian)=No) AND ((tblKentuckyCounties.Metro)=No))
;
单独查找记录:
SELECT DISTINCT tblKentuckyCounties.Appalachian, tblKentuckyCounties.Metro, Visits.admitNumUlcers, Person.PersonID
FROM (tblKentuckyCounties INNER JOIN Person ON tblKentuckyCounties.ID = Person.County) INNER JOIN Visits ON Person.PersonID = Visits.PersonID
GROUP BY tblKentuckyCounties.Appalachian, tblKentuckyCounties.Metro, Visits.admitNumUlcers, Person.PersonID
HAVING (((tblKentuckyCounties.Appalachian)=No) AND ((tblKentuckyCounties.Metro)=No));
【问题讨论】:
-
DISTINCT在这些查询中毫无意义。我并不是说它会造成问题,但建议你还是摆脱它。 -
@HansUp - 你是对的。 DISTINCT(仅在第一个查询中)是问题的一部分。请参阅下面的答案...
-
@Igor Turman 该查询按阿巴拉契亚和 Metro 进行分组,并为 admissionNumUlcers 生成一个组平均值。为了使 DISTINCT 有所作为,您需要假设两个组对于这 3 个字段表达式具有相同的值。该查询中使用的 GROUP BY 怎么可能发生这种情况?
-
@HansUp - 对你的第一条评论投赞成票是我的 :)
-
@Igor Turman 谢谢,我猜。 :-) 我想说的是 GROUP BY 在这里单独返回不同的行。添加关键字 DISTINCT 不会做出任何贡献……因为它不会更改结果集。所以删除关键字 DISTINCT 也不会改变任何东西。 (我认为这可能是你和我显然不同意的一点。)