【发布时间】:2014-10-17 18:22:28
【问题描述】:
所以我有一个包含三个重要列的表:商店位置、客户和购买次数。比如:
Store | Customer | Number of purchases
A Larry 2
B Moe 4
C Curly 7
B Tina 1
A Dina 6
C Archer 12
D Mallory 3
我想做的是计算每个购买次数。也就是说,计算客户进行 1 次购买、2 次购买、3 次购买、4 次购买等的次数,类似于按商店分组的直方图。
Store | 1 Purchase | 2 Purchases | 3 Purchases...
A 1 3 2
B 2 1 4
C 1 6 8
D 4 4 2
是否有任何聪明的方法可以做到这一点,而无需手动找出最大购买数量是多少并创建一个分支计数来计算每一个?所以我已经有了
SELECT Store,
Count(CASE number_of_purchases when 1 then 1 else null end) as 1_purchase,
Count(CASE number_of_purchases when 2 then 1 else null end) as 2_purchase,
Count(CASE number_of_purchases when 3 then 1 else null end) as 3_purchase...
FROM table
GROUP BY Store;
但是,由于最大数量会随时间而变化,我希望查询能够自动计算并考虑到这一点。任何帮助将不胜感激!
【问题讨论】:
-
已修复,感谢您的提示。
-
您正在寻找的是“枢轴”或“交叉表”查询。查看
tablefunc扩展中的crosstab函数:postgresql.org/docs/current/static/tablefunc.html
标签: sql postgresql pivot