SQL Server AVG和Excel AVERAGE产生不同的结果?

我试图显示在SQL服务器上的平均值,但是当我在Excel中testing数据的结果是不一样的,必须有一些明显的我缺less的东西。

以下是SQL服务器的代码和结果:

SELECT DISTINCT d.d_reference + ' - ' + d.d_name AS Faculty, AVG(sub.GroupSize) AS FacultyAverage FROM unitesnapshot.dbo.capd_register r INNER JOIN unitesnapshot.dbo.capd_studentregister sr ON sr.sr_register = r.r_id INNER JOIN unitesnapshot.dbo.capd_activity a ON a.a_register = r.r_id INNER JOIN unitesnapshot.dbo.capd_moduleactivity ma ON ma.ma_activity = a.a_id INNER JOIN unitesnapshot.dbo.capd_module m ON m.m_id = ma.ma_activitymodule INNER JOIN unitesnapshot.dbo.capd_department d ON d.d_id = m.m_moduledept INNER JOIN unitesnapshot.dbo.capd_section sec ON sec.s_id = m.m_modulesection INNER JOIN (SELECT r.r_reference, COUNT(DISTINCT s.s_studentreference) AS GroupSize FROM unitesnapshot.dbo.capd_student s INNER JOIN unitesnapshot.dbo.capd_person p ON p.p_id = s.s_id INNER JOIN unitesnapshot.dbo.capd_studentregister sr ON sr.sr_student = p.p_id INNER JOIN unitesnapshot.dbo.capd_register r ON r.r_id = sr.sr_register GROUP BY r.r_reference) sub ON sub.r_reference = r.r_reference WHERE SUBSTRING(r.r_reference,4,2) = '12' AND d.d_reference = '730' GROUP BY d.d_reference, d.d_name 

在这里输入图像说明

以下是Excel中的结果:

在这里输入图像说明

谢谢

试试这个有趣的:

 select avg(a) from (values(1),(2),(3),(4)) x(a); avg(a) ------- 2 

AVG()返回与基本列相同的数据types。 如果你的列的types是int ,那么结果也会被截断为int 。 以下返回“正确”的结果。

 select avg(cast(a as decimal(10,5))) from (values(1),(2),(3),(4)) x(a); result -------- 2.5 

你显示的差异(24 vs 19.50484)很可能会与此相关的另一个错误。 例如,要检查是否在Excel中总结了与SQL Server中相同的数据,请将此结果转储到Excel中并进行总结。 如果它不符合目前您所认为的与SQL Server数据相同的Excel,请将列alignment并检查它们是否具有相同的行数。 然后按值ASCENDING分别对每列进行sorting并再次比较。

 SELECT d.d_name, sub.GroupSize AS FacultyAverage FROM unitesnapshot.dbo.capd_register r INNER JOIN unitesnapshot.dbo.capd_studentregister sr ON sr.sr_register = r.r_id INNER JOIN unitesnapshot.dbo.capd_activity a ON a.a_register = r.r_id INNER JOIN unitesnapshot.dbo.capd_moduleactivity ma ON ma.ma_activity = a.a_id INNER JOIN unitesnapshot.dbo.capd_module m ON m.m_id = ma.ma_activitymodule INNER JOIN unitesnapshot.dbo.capd_department d ON d.d_id = m.m_moduledept INNER JOIN unitesnapshot.dbo.capd_section sec ON sec.s_id = m.m_modulesection INNER JOIN (SELECT r.r_reference, COUNT(DISTINCT s.s_studentreference) AS GroupSize FROM unitesnapshot.dbo.capd_student s INNER JOIN unitesnapshot.dbo.capd_person p ON p.p_id = s.s_id INNER JOIN unitesnapshot.dbo.capd_studentregister sr ON sr.sr_student = p.p_id INNER JOIN unitesnapshot.dbo.capd_register r ON r.r_id = sr.sr_register GROUP BY r.r_reference) sub ON sub.r_reference = r.r_reference WHERE SUBSTRING(r.r_reference,4,2) = '12' AND d.d_reference = '730' ORDER BY d.d_name