我想要一个如下表的结果集:
我试过查询:
select sdate, sum(PG)/sum(PT)*100 AS Score, avg(score) as Mean from table
但我没有得到正确的平均值。
平均值是:所有分数的总和/总分数。
我想将平均值显示为计算列。在上面的结果集中,总分是 309,除以 4(总行数)得到 77.25。
我想显示结果集中显示的结果。
我想要一个如下表的结果集:
我试过查询:
select sdate, sum(PG)/sum(PT)*100 AS Score, avg(score) as Mean from table
但我没有得到正确的平均值。
平均值是:所有分数的总和/总分数。
我想将平均值显示为计算列。在上面的结果集中,总分是 309,除以 4(总行数)得到 77.25。
我想显示结果集中显示的结果。
我相信您正在寻找类似的东西:
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
它不漂亮,但我相信它会完成你想要的。
DECLARE @mean DECIMAL(5,2);
SELECT @mean = AVG(score) FROM dbo.table;
SELECT sdate, score, Mean = @mean FROM dbo.table;
我认为这对你有用
由于您需要在每一行中显示平均值,因此我每次都使用子查询来生成该平均值。
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
但是如果您先计算 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