【问题标题】:SQL Server top nth averageSQL Server 平均排名前 n
【发布时间】:2014-02-24 17:29:26
【问题描述】:

我试图在 SQL 中找到前 n 行的平均值,

但发现我的查询有一些有趣的输出。我不确定为什么我没有得到我想要的输出。

这是我的查询

DECLARE @myTable TABLE
        (
             rowNum int not null
       , ResponseID int not null
       , AverageValue decimal(18,2) not null
        )

INSERT  @myTable
VALUES  (1,1,1),
        (1,1,2),
        (1,1,2),
        (1,1,9),
        (1,1,3),
        (1,1,8),
        (1,1,10),
        (1,1,3)

SELECT * FROM @myTable
SELECT TOP 7 * FROM @myTable

SELECT TOP 7 AVG(averageValue) FROM @myTable

SELECT (1.00+2.00+2.00+9.00+3.00+8.00+10.00)/7

请谁能告诉我为什么我得到不同的价值?

谢谢 阿米特·帕特尔。

【问题讨论】:

    标签: sql sql-server average


    【解决方案1】:

    您不是在平均前 7 行,而是选择 averageValue 列平均值的前 7 行

    你现在说的是:

    “给我averageValue列的平均值的前7个结果”

    由于AVG()是一个聚合函数,所以只有一个结果!

    你想说的是:

    “给我averageValue列前7个结果的平均值”

    为此,您需要一个 subquery 来平均前 7 行(并获得一个平均值):

    SELECT AVG(averageValue) FROM 
    ( Select Top 7 averagevalue from @myTable ) t
    -- returns 5.00000; 1 rows affected.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-29
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      相关资源
      最近更新 更多