Sql Can';我不理解结果
我无法理解两种不同的结果。 我正在努力获得学生平均成绩前10%的成绩,按他们的平均成绩排序Sql Can';我不理解结果,sql,sql-server,Sql,Sql Server,我无法理解两种不同的结果。 我正在努力获得学生平均成绩前10%的成绩,按他们的平均成绩排序 select top 10 percent avg (markrate) as GPA from mark 输出: 现在当我询问 select top 10 percent avg (markrate) as gpa, studentid from mark group by studentid 我假设这是因为有一群学生的1分和2分,所以平均成绩发生了变化 现在 为什么结果是82分和2分?为什么
select top 10 percent avg (markrate) as GPA
from mark
输出:
现在当我询问
select top 10 percent avg (markrate) as gpa, studentid
from mark
group by studentid
我假设这是因为有一群学生的1分和2分,所以平均成绩发生了变化
现在
为什么结果是82分和2分?为什么这是正确的答案
因为studentID 2是gpa较低的一个,根据我的计算,它是82.5 gpa,但我猜MarkRate的数据类型是整数,因此,它将其舍入到82尝试您的查询,而不使用
前10%
,希望它能消除您的疑虑。
1.与第一次查询一样,不使用前10%
select avg (markrate) as GPA
from mark
select avg (markrate) as gpa, studentid
from mark
group by studentid
这将只返回一条记录,即markrate
的avg
值。如果使用前10%
,则它将从完整结果返回10%的行
2.在第二次查询中,不使用前10%
select avg (markrate) as GPA
from mark
select avg (markrate) as gpa, studentid
from mark
group by studentid
3.这将返回四条记录,它们将是markrate
每studentid
的avg
值。如果使用前10%
,则它将从这4行结果中返回10%的行
在第三个查询中,第二个查询将发生相同的情况,但结果按gpa排序,因此它显示的结果与第二个查询不同。此查询:
select top 10 percent avg(markrate) as gpa, studentid
from mark
group by studentid
很可能没有达到你的期望。它通过studentid
聚合所有数据。然后取结果行的“前10%”。SQL Server正在将该行舍入为1行
哪一排?任意的行。不建议使用orderby
而使用top
,因为这样会得到不确定的行。如果您在没有top
(或top 100%
)的情况下运行查询,您将看到每个学生的平均值。其中一行是任意选择的
当您添加按gpa排序的时,您将得到gpa最低的学生。平均值是82,而不是82.5,因为列是一个整数——因此结果是一个整数
我更倾向于用十进制数看结果——并考虑领带:
select top 10 percent with ties avg(markrate * 1.0) as gpa, studentid
from mark
group by studentid
order by gpa
请您以文本格式而不是图像格式放置样本数据和预期输出。