按一列排序但如果另一列为空则推送到最后

问题描述 投票:0回答:1

我正在尝试根据排名对某些结果进行排序,但我想在没有图像的情况下将结果推到最后。

我有一张桌子有instructor_profiles和另一张users桌子。我正在尝试根据密集排名对教师的个人资料进行排序,但是想在最后展示那些没有图片的人。

我的排名很好,但我无法弄清楚如何做到这一点。

例如:

SELECT ts_rank_cd("instructor_profiles"."search_vector", plainto_tsquery('english', 'skate')),
 "instructor_profiles".id, 
 "instructor_profiles".title, 
 "instructor_profiles".image, 
 users.avatar
 FROM "instructor_profiles" LEFT JOIN users ON users.id = instructor_profiles.user_id 
 WHERE ("instructor_profiles"."search_vector" @@ plainto_tsquery('english', 'skate')) 
 ORDER BY 
        ts_rank_cd("instructor_profiles"."search_vector", plainto_tsquery('english', 'skate')) desc
 LIMIT 50 OFFSET 0

将得到这个结果:

然后我尝试将ORDER BY更改为

ORDER BY instructor_profiles.image NULLS LAST,
users.avatar NULLS LAST,
ts_rank_cd("instructor_profiles"."search_vector", plainto_tsquery('english', 'skate')) desc

但后来我的等级排序完全搞砸了:

sql postgresql sql-order-by rank
1个回答
1
投票

在您的订购中使用CASE,例如:

 ORDER BY CASE 
            WHEN instructor_profiles.image IS NOT NULL 
              OR users.avatar IS NOT NULL 
            THEN 0 
            ELSE 1  
          END ASC,
          ts_rank_cd DESC

这不是由imageavatar命令,只是因为它是否是NULL,并且所有不是被平等对待并且您的排名函数将适用。

© www.soinside.com 2019 - 2024. All rights reserved.