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

Order by One column But Push to the end if Another column is null

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

我有一个 table 和 instructor_profiles 以及另一个 users table。我正在尝试根据密集排名对讲师的个人资料进行排序,但想在最后显示没有图片的那些。

我的排名工作正常,但我不知道该怎么做。

例如:

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

但是我按等级排序完全搞砸了:

在您的订单中使用 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 排序的,所有不是的都一视同仁,你的然后将应用排名功能。