我正在摆弄 MS SQL,运行这两个查询后得到不同的结果(......也许这只是我对 MS SQL 的业余爱好):
/* 如果你发现任何语法错误也没关系,我正在写这个 */
SELECT
AVG(X.AvgDailyExpense) AS AverageDailyExpense
FROM
(SELECT
AVG(we.DailyExpense) AS AvgDailyExpense
FROM
WorkerExpense we
LEFT JOIN Worker w ON w.Id = we.WorkerId
GROUP BY
w.Id) X;
SELECT
AVG(we.DailyExpense) AS AverageDailyExpense
FROM
WorkerExpense we
LEFT JOIN Worker w ON w.Id = we.WorkerId;
WorkerExpense 和 Worker 之间有一个外键,WorkerExpense 表不可能引用不存在的工作行。此外,DailyExpense 是货币数据类型(也许这很重要?)。
现在,下层查询返回应该是正确的结果(我在少量行上手动计算了结果),上层查询总是返回一个大于它应该的值。
谁能更详细地解释一下为什么会发生这种情况?是因为数字四舍五入还是...?