0

以下の 2 つのクエリがあります。合計は異なって返されますが、各クエリの合計を同じ方法で追加しています。戻ってくる合計が異なるのはなぜですか?

    select [Total Children] = (SUM(demo.NumberOfPreschoolers) + SUM(demo.NumberOfToddlers) + SUM(demo.NumberOfInfants)),
County = co.Description
from ClassroomDemographics as demo
inner join Classrooms as c on demo.Classroom_Id = c.Id
inner join Sites as s on c.Site_Id = s.Id
inner join Profiles as p on s.Profile_Id = p.Id
inner join Dictionary.Counties as co on p.County_Id = co.Id
where co.Description = 'MyCounty'
Group By co.Description


select [Number Of DLL Children] = SUM(cd.NumberOfLanguageSpeakers),
[Total Children] = (SUM(demo.NumberOfPreschoolers) + SUM(demo.NumberOfToddlers) + SUM(demo.NumberOfInfants)),
County = co.Description
from ClassroomDLL as cd
inner join Classrooms as c on cd.Classroom_Id = c.Id
inner join Sites as s on c.Site_Id = s.Id
inner join Profiles as p on s.Profile_Id = p.Id
inner join Dictionary.Counties as co on p.County_Id = co.Id
inner join ClassroomDemographics as demo on c.Id = demo.Classroom_Id
where co.Description = 'MyCounty'
Group by co.Description
4

2 に答える 2

0

テーブルへの結合Classroomsは、2 番目のクエリで余分なテーブルと結合しています。

クエリ 1:

from ClassroomDemographics as demo
inner join Classrooms as c on demo.Classroom_Id = c.Id

クエリ 2:

from ClassroomDLL as cd
inner join Classrooms as c on cd.Classroom_Id = c.Id
...
inner join ClassroomDemographics as demo on c.Id = demo.Classroom_Id

私の賭けは、ClassroomDLLテーブルに含まれるデータが少ないか、結合基準列の 1 つに null を含む行があり、そのいずれかが結果から行を除外し、集計合計を無効にする可能性があるということです。

于 2013-03-27T15:44:12.427 に答える
0

2 つのクエリをざっと見てみると、次のように推測できます。

inner join ClassroomDemographics as demo on c.Id = demo.Classroom_Id

2 番目のクエリでは、最初のクエリの結果が除外されているため、集計値は異なります。

于 2013-03-27T15:32:52.407 に答える