我现在正在编写一个非常复杂的查询,我现在面临一个我无法解决的问题。
我有一个名为tbl的表,有2列: movie_id,排名 (INTEGER),(LIKE \ DISLIKE \ NULL)
我需要编写一个返回前10部电影的查询 拥有最多的LIKES。 (如果喜欢相同,则需要按升序movie_id排序)
边缘案例: 如果少于10部电影有Rank ='LIKE' (假设只有7个)然后我需要按照喜欢和的数量来回复那些按照movie_id排序的另外3个movies_id的7个movie_id的排序 (如果Rank值中有'DISLIKE'或NULL)无关紧要
如果桌面上没有10部电影,那么我需要返回表格中的电影(以前面说明的相同方式,也就是说,首先我需要按照'LIKES的数量返回订购的电影'然后由movie_id订购的其余部分)
有人可以帮帮我吗?
谢谢!
答案 0 :(得分:0)
我认为这符合你的描述:
select t.*
from tbl t
order by ( (ranktype = 'like')::int ) desc,
rank desc
fetch first 10 rows only;