2016-09-24 22 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 Count)を行にピボットさせることができるのか分かりません。
+0

サンプルデータと結果の関係は?意味がない。 –

+0

こんにちはゴードン、ATMのマウントは、過去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の金額(出力テーブル)= sum(金額)ここで、元のテーブルのcategory = ATMです。結果には、ATMの金額として合計金額が表示され、照会に表示されているようにATM数としてカウント(金額)が表示されます。あなたの助けをもう一度ありがとう! – Ninjia123

関連する問題