行号为CASE WHEN的ORDER BY

我的数据如下所示

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

它提供有关用户对哪个购买桶进行分类以及次数分类的信息。

因此,用户123purchase_bucket 8中被两次分类。 (Frequency = 2)。

用户321进入unclassified purchase_bucket已有1次(Frequency = 1)。

问题是,当用户的Frequency拥有超过1个purchase_bucket并且两个用户的频率相同时

例如:用户125对于Frequencyunclassified具有相同的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

有人可以帮我吗?

qinhao8438 回答:行号为CASE WHEN的ORDER BY

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

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
本文链接:https://www.f2er.com/3158010.html

大家都在问