2015-04-28 149 views
-1

我想獲得average的計算sum。我從this stackoverflow answer嘗試過的語法所以我的SQL查詢如下所示:SUM的SQL AVG

SELECT AVG(iq.stockvalue_sum), iq.date 
FROM(
    SELECT CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') as date, 
    SUM(GREATEST(s.stockvalue,0)) as stockvalue_sum 
    FROM stockvalues s 
    GROUP BY CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') 
) iq 

然而,這是不是給我一個正確的平均值。我想要得到每年平均stockvalue。該表背後的想法是每天保存每種產品的庫存和庫存價值。因此,此特定查詢將顯示其數據每年的平均股價。

編輯:樣本輸出數據

Stockvalue | Year 
_________________ 
- 205  | 2015 
- 300  | 2014 

輸入數據:

pid | val | date 
______________________ 
- 1 | 100 | 28-04-2015 
- 2 | 150 | 28-04-2015 
- 1 | 80 | 27-04-2015 
- 2 | 80 | 27-04-2015 
.... 
- 1 | 100 | 29-01-2014 
- 2 | 100 | 29-01-2014 
- 1 | 200 | 30-01-2014 
- 2 | 200 | 30-01-2014 

所以我需要計算知道total stockvalue的平均值。因此,對於X日所有stockvalues之和X

+0

你的外部查詢是由缺少一組,但由於邏輯分組列('iq.date')與內部查詢相同,沒有多大意義,即你的內部查詢每年只返回一個結果,所以取這一行的平均值是毫無意義的。因此,我對你的要求有點困惑,或許一些樣品數據和預期產量會有所幫助? – GarethD

+0

@GarethD我添加了一些樣本數據 – Bram

+0

沒有樣本輸入,樣本輸出沒有幫助。我的觀點是,我不明白爲什麼你需要'SUM',你能不能直接做一個平均值,所以把SUM(GREATEST(s.stockvalue,0))改爲'AVG(GREATEST(s) .stockvalue,0))',並完全擺脫外部查詢。 – GarethD

回答

1

我認爲你需要按日期你內心的查詢,並通過一年的外部查詢,讓您的結果後:

SELECT AVG(s.Stockvalue) AS Stockvalue 
     YEAR(s.Date) AS Date 
FROM ( 
      SELECT DATE(s.Date) AS Date, 
        SUM(GREATEST(s.stockvalue,0)) AS Stockvalue 
      FROM stockvalues AS s 
      GROUP BY DATE(s.Date) 
     ) AS s 
GROUP BY YEAR(s.Date); 
+0

是的,你是對的,我必須按日期分組,然後按年分組。謝謝! – Bram

4

的平均最低你缺少你的外部查詢group by

SELECT AVG(iq.stockvalue_sum), iq.date 
FROM(
    SELECT CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') as date, 
    SUM(GREATEST(s.stockvalue,0)) as stockvalue_sum 
    FROM stockvalues s 
    GROUP BY CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') 
) iq 
GROUP BY iq.date 

然而,鑑於你的內部查詢返回一個單一年的總價值,該價值的平均值將是相同的。也許你可以澄清你的意圖。你確定你需要內部查詢嗎?也許這就是你需要的一切?

select avg(GREATEST(stockvalue,0)), CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') as date 
from stockvalues 
group by CONCAT(DATE_FORMAT(s.date, '%Y'), '-01-01') 
+0

沒有,這是行不通的。我將每個產品的庫存量保存到數據庫中。所以爲了得到當天的平均水平,我需要做一筆所有股票的總和。和平均的。所以要讓事情更清楚些。我不需要知道產品的平均股價。但那一天。 – Bram