按一列排序但如果另一列为空则推到最后
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
这不是按 image
或 avatar
排序的,而是按是否 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
这不是按 image
或 avatar
排序的,而是按是否 NULL
排序的,所有不是的都一视同仁,你的然后将应用排名功能。