SQL Server平均值,当第一个值为0时

时间:2014-06-19 15:07:51

标签: sql sql-server database average

如何获得此查询的平均值?查询工作正常但我无法获得所有列的平均值

 INSERT INTO db_name(
    AVERAGE_WEIGHT,
    RUNNING_TOTAL,
    ROLLING_AVERAGE)
    VALUES
    (onvert(real, '515,
    (convert(real, '515 + (SELECT SUM(average_weight)  FROM db_name)),
    (SELECT AVG(average_weight)  FROM db_name))

AVERAGE_WEIGHT    RUNNING_TOTAL     ROLLING_AVERAGE
515            NULL                  NULL
510            1025                  515
500            1525                  512.2

我的最后一列应为NULL,512.2,508.33如何获得正确的值?有可能吗?

2 个答案:

答案 0 :(得分:2)

如果您想要滚动平均值并且正在使用SQL Server 2012或更高版本,请执行以下操作:

select weight,
       sum(weight) over (order by id) as running total,
       avg(weight) over (order by id) as rolling average
from db_name;

这假设有一个id列指定行的顺序。 SQL表本质上是无序的,因此需要一列。

请注意,您对滚动平均值的定义不是传统定义。值为515,512.5和508.3。以上归还了这些。

如果要将这些值插入表中,请在前面加上insert语句。您的查询是从同一个表插入和读取。这看起来很奇怪。你无法通过这种方式获得累积值。

答案 1 :(得分:0)

尝试:

INSERT INTO db_name(
    AVERAGE_WEIGHT,
    RUNNING_TOTAL,
    ROLLING_AVERAGE)
    VALUES
    (convert(real, '515'),
    (convert(real, '515') + (SELECT SUM(COALESCE(average_weight,0))  FROM db_name)),
    (SELECT AVG(COALESCE(average_weight,0))  FROM db_name))