如何创建频率分布?

时间:2015-08-18 08:45:07

标签: sql database postgresql

我正在尝试创建一个频次分布,以显示有多少客户已经交易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可能有所帮助,但我被困住了,不知道如何前进。

1 个答案:

答案 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