查询返回具有复杂条件的10个值

时间:2018-05-19 11:03:25

标签: sql postgresql

我现在正在编写一个非常复杂的查询,我现在面临一个我无法解决的问题。

我有一个名为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订购的其余部分)

有人可以帮帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这符合你的描述:

select t.*
from tbl t
order by ( (ranktype = 'like')::int ) desc,
         rank desc
fetch first 10 rows only;