我正在编写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
答案 0 :(得分:4)
第一个查询平均dbo.Table
中的所有行 - 它取TOP 50
个平均值,但只有一个值。
第二个查询占据前50行(特别是没有排序),然后对它们求平均值。第二个查询是你想要的。