我想从表中得到如下结果集:
我试过了查询:
select sdate, sum(PG)/sum(PT)*100 AS Score, avg(score) as Mean from table
但我没有得到正确的平均值。
平均值是:所有分数的总和/总分数。
我想将均值显示为计算列。在上面的结果集中,总分数为309,当除以4(总行数)时,得分为77.25。
我想显示结果集中显示的结果。
答案 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
但如果先计算平均值并在select语句中使用该变量
,那将会很好SELECT d,score,
ISNULL((select CONVERT(DECIMAL(10,2),CONVERT(DECIMAL(10,2),sum(score))/count(*) ) from @mean) ,0) as mean from @mean