SQL 将新行排名更高但每 4 行最多一次,否则使用默认顺序

SQL Rank New Rows Higher But Only Max Every 4 Rows, Use Default Order By Otherwise

这个问题看似简单,但是在搞乱了RANK、Partition等之后,我一直没能找到可行的解决方案。

我们有一个简单的 table 拍卖项目,每个项目都有一个搜索分数。我们希望提高新上市的拍卖品的知名度,并每隔 4 个结果显示一次,即使它们的搜索分数较低。新列出的项目本身按搜索分数排名(请注意,如果新列出的项目具有高搜索分数,它可能会略微降级)。

拍卖物品的示例数据:

id 姓名 is_new 搜索得分
300 苹果iPad 200
3 三星 s8 190
12 另一项 181
412 ps4 10
33 又一个 177
201 观看 173
112 iphone x 169
450 电子游戏 6
12 拍卖品 165

我们要解决的问题是提升新项目的数量,而不是让它们聚集在一起。所以在上面的结果中,每个 is_new = true 项目每 4 行显示一次,按搜索分数排序。

我想你可以使用算术技巧。我认为这样做:

order by (case when is_new = 'false'
               then row_number() over (partition by is_new order by score desc) * 1.0
               else row_number() over (partition by is_new order by is_new score desc) * 3 + 0.5
          end)

这会每隔四行插入 is_new = 'true' 条记录。