我有一个巨大的客户订单表,我想运行一个查询,按月份列出过去13个月的“user_id”订单。目前我的查询(如下所示)可以工作,但是它列出的每个用户ID都显示了该用户的每个订单。例如:一个用户在我们这里的总共有42个订单,因此它会在42行中列出他的用户ID,而每行只有一个付款。通常我会把这个放到Excel的透视表中,但是我超过了一百万行的限制,所以我需要正确的方法并且一直没有成功。我希望输出结果看起来像这样:
用户ID | 2012年7月 | 2012年8月 |
123456 | 150.00 | 150.00 |
而不是这样:
用户ID | 2012年7月 | 2012年8月 |
123456 | 0.00 | 150.00 |
123456 | 150.00 | 0.00 |
等等,还有40多行
用户ID | 2012年7月 | 2012年8月 |
123456 | 150.00 | 150.00 |
而不是这样:
用户ID | 2012年7月 | 2012年8月 |
123456 | 0.00 | 150.00 |
123456 | 150.00 | 0.00 |
等等,还有40多行
SELECT ui.user_id,
SUM(CASE WHEN date_part('year', o.time_stamp) = 2012 AND date_part('month', o.time_stamp) = 07 THEN o.amount ELSE 0 END) jul_12,
SUM(CASE WHEN date_part('year', o.time_stamp) = 2012 AND date_part('month', o.time_stamp) = 08 THEN o.amount ELSE 0 END) aug_12,
FROM orders o JOIN users_info ui ON ui.user_id = o.user_id
WHERE user_id = '123456'
GROUP BY ui.user_id, o.time_stamp;
CASE
- 我把年份过滤器移到了WHERE
条件中,以缩短查询时间并提高速度。 - Ihor Romanchenko这个
。但最好的解决方案是在客户端使用某种编程语言将数据获取到一个简单的id,月份,总和
表中,并进行透视。 - Ihor Romanchenko