我的数据如下所示
+---------+-----------------+-----------+
| 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
拥有超过1个purchase_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 |
+---------+-----------------+-----------+----+
来消除重复项,但未能获得理想的结果。
我的查询和结果
{{1}}
示例fiddle
有人可以帮我吗?