我正在尝试根据排名对某些结果进行排序,但我想在没有图像的情况下将结果推到最后。
我有一张桌子有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
但后来我的等级排序完全搞砸了:
在您的订购中使用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
,并且所有不是被平等对待并且您的排名函数将适用。