2015-08-18 55 views
0

我试图创建一个频率分布显示有多少客户交易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

提示:你需要的是频率的频率。 (你需要一个额外的聚合层) – wildplasser

回答

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 
+0

谢谢@jpw,这工作完美,我学到了一些关于内部和外部查询的新内容! –

+0

@SiamChoudhury很高兴有帮助:) – jpw