Sql Can';我不理解结果

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分?为什么

我无法理解两种不同的结果。 我正在努力获得学生平均成绩前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分?为什么这是正确的答案


因为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

请您以文本格式而不是图像格式放置样本数据和预期输出。