0

我想要一个如下表的结果集:

在此处输入图像描述

我试过查询:

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

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

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

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

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

4

3 回答 3

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

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

于 2013-04-02T04:56:40.663 回答
0
DECLARE @mean DECIMAL(5,2);

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

SELECT sdate, score, Mean = @mean FROM dbo.table;
于 2013-04-02T04:37:56.627 回答
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 小提琴链接

但是如果您先计算 avg 并在您的 select 语句中使用该变量会很好

SELECT d,score,
ISNULL((select CONVERT(DECIMAL(10,2),CONVERT(DECIMAL(10,2),sum(score))/count(*) ) from @mean) ,0) as mean from @mean
于 2013-04-02T04:47:56.717 回答