我可以对从不同WHERE子句获得的结果进行排名吗?

时间:2017-10-13 02:07:25

标签: postgresql

说我想选择包含特定标签或与关键字匹配的帖子。

select t1.*
from (
select p.*, count(p.id) from plainto_tsquery('hElLo') AS q , post p 
left join post_tag pt on pt.post_id = p.id
left join tag t on t.id = pt.tag_id
WHERE (tsv @@ q) or t.id in (2,3)
group by p.id
) as t1 
order by count desc, ts_rank_cd(t1.tsv, plainto_tsquery('hElLo')) desc 
limit 5;

以上确实选择了我想要的东西。在tsv中,我给了title一个体重和description D重量。当按count排序时,它现在变得毫无意义,因为每个条目具有相同的权重。是否可以执行以下操作:如果从t.id in (2,3)选择此行,则将它们排序到第一行,然后按ts_rank_cd排序,或者给每个匹配标记'A'重量,标题变为B重量和描述是D?

2 个答案:

答案 0 :(得分:1)

尝试CASE WHEN

name

已编辑(正确答案):

bsi.production.order

答案 1 :(得分:0)

我不确定为什么计数会相同,但您可以为order by添加更多密钥:

order by count desc,
         (t.id in (2, 3)) desc,
         ts_rank_cd(t1.tsv, plainto_tsquery('hElLo')) desc ;

desc是因为true>是的,你希望真正的价值是第一位的。