我正在尝试根据排名对一些结果进行排序,但是我想将没有图像的结果推到最后。
我有一个包含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
但是然后我的排名完全被搞砸了:
答案 0 :(得分: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
这不是由image
或avatar
来排序的,仅仅是因为它是否是NULL
,而所有未得到平等的对待和您的排名功能然后将适用。