从列值计算平均值

时间:2013-04-02 04:36:01

标签: sql-server sql-server-2005

我想从表中得到如下结果集:

enter image description here

我试过了查询:

select sdate, sum(PG)/sum(PT)*100 AS Score, avg(score) as Mean from table

但我没有得到正确的平均值。

平均值是:所有分数的总和/总分数。

我想将均值显示为计算列。在上面的结果集中,总分数为309,当除以4(总行数)时,得分为77.25。

我想显示结果集中显示的结果。

3 个答案:

答案 0 :(得分:1)

我相信你正在寻找类似的东西:

SELECT sdate, 
       SUM(PG)/SUM(PT)*100 AS Score, 
       (SELECT AVG(score) FROM table) AS Mean 
FROM table

这应该将平均值设置为整个表格的平均分数。如果您有WHERE条款进行过滤,则必须将它们放在子查询和主查询中。

修改

如果原始SQL语句有GROUP BY,就像它听起来那样,那么您可以使用以下查询来实现您所需的内容:

SELECT sdate, 
       SUM(PG)/SUM(PT)*100 AS score, 
       (SELECT AVG(score) 
        FROM (SELECT CAST(SUM(PG)/SUM(PT)*100 AS FLOAT) AS score 
              FROM table 
              GROUP BY sdate) scores) AS Mean
FROM table
GROUP BY sdate

它不漂亮,但我相信它会完成你想要的东西。

答案 1 :(得分:0)

DECLARE @mean DECIMAL(5,2);

SELECT @mean = AVG(score) FROM dbo.table;

SELECT sdate, score, Mean = @mean FROM dbo.table;

答案 2 :(得分:0)

我认为这对你有用

因为你需要在每一行显示平均值,所以我每次使用子查询来生成平均值。

create table mean
(
  d date,
  score int 

)

insert into mean values ('01/01/2013',50),('02/01/2013',60)
                       ,('03/01/2013',40),('04/01/2013',30)
                       ,('05/01/2013',20),('06/01/2013',20)


SELECT d,score,(select sum(score)/count(*) from mean) from mean

SQL FIDDLE LINK

但如果先计算平均值并在select语句中使用该变量

,那将会很好
SELECT d,score,
ISNULL((select CONVERT(DECIMAL(10,2),CONVERT(DECIMAL(10,2),sum(score))/count(*) ) from @mean) ,0) as mean from @mean