2015-08-18 2 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

Смежные вопросы