2013-04-02 318 views
0

我想要一個結果集從表如下:從計算列平均值

enter image description here

我試着查詢:

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

,但我沒有得到正確的意思。

意思是:所有分數的總和/總分數。

我想顯示平均值爲計算列。在上述結果集中,總得分爲309,除以4(總行數)得到77.25。

我想顯示結果集中顯示的結果。

回答

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 

這不是很好,但我相信它會完成你正在尋找的東西。

+0

我試着添加如上所述的子查詢,但它不會在子查詢中識別別名「Score」。 – RKh

+0

啊。沒有點擊那兩個分數是相同的。如果我正確理解了表結構,那麼它看起來像是有一個「GROUP BY Date」發生,並且您正在按日期計算得分。如果是這種情況,我會更新查詢以利用該邏輯。 – cmptrgeekken

0
DECLARE @mean DECIMAL(5,2); 

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

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

我已經更新了這個問題。請檢查。 – RKh

+0

它可以使用單個查詢完成嗎? – RKh

+0

爲什麼它需要是「單個查詢」? –

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