这个问题看起来很简单,但在处理了RANK、Partition等之后,我一直无法找到可行的解决方案。
我们有一个简单的拍卖项目表,每个都有一个搜索分数。我们希望对新列出的拍卖项目进行提升,并每4个结果显示一次,即使它们的搜索分数较低。新列出的项目本身根据搜索得分进行排名(要意识到,如果新列出的项的搜索得分很高,它可能会被稍微降级(。
拍卖品样本数据:
id | 名称 | is_new | 搜索得分|
---|---|---|---|
300 | 苹果iPad | false200 | |
3 | 三星s8 | 错误190 | //tr>|
12 | 另一项 | 错误181 | |
412 | ps4 | true | 10 |
33 | 又是一个 | 错误177 | |
201 | 手表 | false||
112 | iphone x | false169 | //tr>|
450 | 电子游戏 | true6 | [/tr>|
12 | 拍卖项目 | 错误165 |
我认为你可以使用算术技巧。我认为这样做:
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'
记录。