2016-09-24 53 views
0

我有一個表像下面:PostgreSQL的生成交叉分析結果

| Email | Category | Amount | Post_date |  
| [email protected] | ATM  | 20  | 2016-09-20 | 
| [email protected] | POS  | 30  | 2016-09-21 | 
| [email protected] | FOOD  | 40  | 2016-09-22 | 
| [email protected] | ENTE  | 50  | 2016-09-23 | 

我想要的輸出是這樣的:

| Email | Category | Last 1 day| Last 3 days | last 5 days | 
| [email protected] | ATM amount | 20  | 40  |  50  | 
|   | POS amount | 0   | 30  |  40  | 
|   | ATM count | 2   | 3   |  3  | 
|   | POS count | 0   | 0   |  3  | 

我可以編寫一個查詢產生一列一次,這樣的作爲最後1天,最近3天,等

我的問題是:

  1. 我不知道如何將結果(最近1天,最近3天等)放在一起?
  2. 而我不知道如何將列(ATM計數)轉換爲行。
+0

您的樣品數據與您的結果之間有什麼關係?這個不成立。 –

+0

嗨戈登,自動提款機是過去1,3,5等人(通過電子郵件識別)花費的美元。天。計數表示該人在過去的1,3,5天內使用ATM/POS卡的次數等。 – Ninjia123

回答

0

我強烈懷疑,你想要一個這樣的查詢:

select email, category, 
     sum(case when post_date >= current_date - interval '1 day' then 1 else 0 end) as last_1, 
     sum(case when post_date >= current_date - interval '3 day' then 1 else 0 end) as last_3, 
     sum(case when post_date >= current_date - interval '5 day' then 1 else 0 end) as last_5 
from t 
group by email, category; 

我承認這是炒作,因爲這個問題不明確。

+0

嗨,謝謝你的回答。但是,結果不應按「類別」分組,因爲輸出中的類別與原始表中的類別不同。 ATM金額(輸出表)=原表中的類別= ATM的金額(金額)。並且結果應該顯示作爲自動櫃員機數量的金額(數量)和計數(金額)作爲ATM計數,如查詢中所示。再次感謝你的幫助! – Ninjia123