У меня есть данные, как показано ниже
+---------+-----------------+-----------+
| user_id | purchase_bucket | Frequency |
+---------+-----------------+-----------+
| 123 | 8 | 2 |
| 321 | unclassified | 1 |
| 124 | 4 | 3 |
| 124 | unclassified | 1 |
| 125 | unclassified | 3 |
| 125 | 4 | 3 |
| 125 | 2 | 1 |
| 126 | 4 | 8 |
| 126 | 2 | 8 |
+---------+-----------------+-----------+
Он дает информацию о том, какой сегмент покупок классифицирован пользователем, и то, сколько раз.
Таким образом, пользователь 123
классифицируетсяв purchase_bucket
8 дважды. (Frequency
= 2).
Пользователь 321
находится в unclassified
purchase_bucket
1 раз (Frequency
= 1).
Проблема в том, что Frequency
для пользователя имеет более 1purchase_bucket
и они оба имеют одинаковую частоту
Например: пользователь 125
имеет одинаковые Frequency
для unclassified
и 4
, оба имеют 3
в качестве частоты.
Мой желаемый результат следующий:
+---------+-----------------+-----------+
| user_id | purchase bucket | Frequency |
+---------+-----------------+-----------+
| 123 | 8 | 2 |
| 321 | unclassified | 1 |
| 124 | 4 | 3 |
| 125 | 4 | 3 |
| 126 | 4 | 8 |
+---------+-----------------+-----------+
Так что для пользователей 123, 321 и 124 проблем нет. Но для пользователя 125 я бы хотел 4
вместо unclassified
в purchase_bucket
.
Для пользователя 126
Мне все равно, придет ли 4
или 2
в корзину покупок.
Короче говоря, я не хочу unclassified
, когда есть какое-то число с тем же Frequency
в корзине покупок для конкретного пользователя.
Я пытался row_number()
, чтобы устранить дубликаты, но не смогполучить желаемые результаты.
Мой запрос и результат
SELECT *
FROM (
SELECT *,
row_number() OVER(PARTITION BY user_id ORDER BY Frequency DESC) as Rn
FROM table1 ) T
WHERE T.Rn = 1
+---------+-----------------+-----------+----+
| user_id | purchase bucket | Frequency | Rn |
+---------+-----------------+-----------+----+
| 123 | 8 | 2 | 1 |
| 124 | 4 | 3 | 1 |
| 125 | unclassified | 3 | 1 |
| 126 | 4 | 8 | 1 |
| 321 | unclassified | 1 | 1 |
+---------+-----------------+-----------+----+
Образец Скрипка
Может кто-нибудь помочь мне с этим?