按大小写排序(当在行号中时)

fykwrbwg  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(223)

我有一个如下所示的数据

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

它给出了用户被分类的购买桶的信息,以及分类的次数。
so用户 123 分类在 purchase_bucket 8两次( Frequency = 2).
用户 321
unclassified purchase_bucket 一次( Frequency = 1).
问题是什么时候 Frequency 对于一个用户有多个 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 而不是 unclassifiedpurchase_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 |
+---------+-----------------+-----------+----+

样品提琴
有人能帮我吗?

cld4siwp

cld4siwp1#

您可以将未分类添加到您的订单中。

SELECT *
FROM (
  SELECT *,
     row_number() OVER(PARTITION BY user_id 
                       ORDER BY CASE WHEN [purchase bucket] <> 'unclassified' THEN 0 ELSE 1 END ASC, 
                                Frequency DESC) as Rn
  FROM table1 
) T
WHERE T.Rn = 1

相关问题