2016-09-24 59 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