我正在尝试创建一个频次分布,以显示有多少客户已经交易1x,2x,3x等。
我有一个数据库transactions
和一列user_id
。每行表示一个事务,如果user_id显示在多行中,则该用户已完成多个事务。
现在我想得到一个看起来像这样的列表:
Tra. | Freq.
0 | 345
1 | 543
2 | 45
3 | 20
4 | 0
5 | 3
etc
目前我有这个,但它只显示了一个用户列表以及他们有多少交易。
SELECT user_id, COUNT(user_id) as number_of_transactions
FROM transactions
GROUP BY user_id
ORDER BY number_of_transactions DESC;
我做了一些挖掘,并建议generate_series
可能有所帮助,但我被困住了,不知道如何前进。
答案 0 :(得分:0)
使用第一个结果作为外部查询的输入,再次应用计数,但这次在number_of_transactions上进行分组:
SELECT number_of_transactions, COUNT(*) AS freq
FROM (
SELECT user_id, COUNT(user_id) as number_of_transactions
FROM transactions
GROUP BY user_id
) A
GROUP BY number_of_transactions;
这会改变结果,如:
user_id number_of_transactions
----------- ----------------------
1 2
2 1
3 2
4 4
到此:
number_of_transactions freq
---------------------- -----------
1 1
2 2
4 1