两个SQL查询之间的区别

时间:2015-06-03 13:30:37

标签: sql sql-server

我正在编写SQL查询以从列中选择前50个值,然后计算这些值的平均值。我写了两个查询来完成这个,但是他们给出了两个不同的值。我相信下面的第二个是正确的,但我想知道两者之间的差异和第一个实际计算的是什么(如果我确实是正确的,那么第二个是正确的)。

第一次查询:

SELECT TOP(50) AVG(COL1) AS COL1_AVG FROM dbo.Table

第二次查询:

SELECT AVG(COL1) FROM (SELECT TOP(50) COL1 FROM dbo.Table) AS COL1_AVG

使用TimeStamp更新了第二个查询:

SELECT AVG(COL1) FROM (SELECT TOP(50) COL1 FROM dbo.Table ORDER BY TimeStamp DESC) AS COL1_AVG

1 个答案:

答案 0 :(得分:4)

第一个查询平均dbo.Table中的所有行 - 它取TOP 50个平均值,但只有一个值。

第二个查询占据前50行(特别是没有排序),然后对它们求平均值。第二个查询是你想要的。