2017-07-17 323 views
1

我有兩個我想實現的查詢。Postgres SQL查詢 - 每月的平均值

我有一個表是這樣的...

Date  | Period | Location | Price 
2017-01-01  1   A   10 
2017-01-01  2   A   15 
2017-01-01  1   B   15 
2017-01-01  2   B   16 

每個日期有48個讀數(每半小時)。

問題1:我希望得到的平均價格的日期範圍按以下格式中的任何給定的位置:

例如與2017年1月1日和2017年6月30日,每期平均價格爲位置「A」

Period 1 | Period 2| Period 3 ... 
     10   11   15 

問題2:我希望有平均價格爲任何給定的位置要回個月的X號: (期間無所謂)

Month | Average price 
january  10 
february  12 
march   16 

任何幫助,將不勝感激:)

+0

你嘗試過什麼到目前爲止? – Jacobm001

+0

這裏有兩個截然不同的問題。我建議你單獨問問他們。 – Jacobm001

+0

你有沒有嘗試過任何東西?..看起來相當簡單'select'查詢全部是需要的 –

回答

0

你列出的第二個查詢是一個非常簡單的操作group by。唯一有點棘手的是你需要從列出的日期中提取月份。

select 
    date_part('month', t.Date) as month 
    avg(t.Price) as average_price 
from 
    mytable t 
group by 
    date_part('month', t.Date) 

第一個查詢但是是顯著更復雜。它涉及crosstab(),如果您尚未啓用數據庫,則必須啓用它。總體思路是計算每個時期的平均值,然後像在Excel中一樣調整數據。

select * from crosstab(
' select 
     t.Period 
     , avg(t.Price) as avg_price 
    from 
     mytable t 
    group by 
     t.Period 
    order by 
     1 
     , 2 
' 
) as ct(
    "Period" text 
    , "1" int 
    , "2" int 
    , "3" int 
    , "4" int 
    , "5" int 
    , "6" int 
    , "7" int 
    , "8" int 
    , "9" int 
    , "10" int 
    , "11" int 
    , "12" int 
) 

answer具有的信息大量的Postgre的crosstab()

+0

感謝您的回覆。雖然我收到以下錯誤... 錯誤:無效的源數據SQL語句 細節:提供的SQL必須返回3列:rowid,類別和值。 ********** **********錯誤 錯誤:無效的源數據的SQL語句 SQL狀態:22023 詳細信息:所提供的SQL必須返回3列:ROWID,類別和價值。 – Daryn