如果其他条件下房间里的机器人如何订购



我有一个项目列表,每个项目都有排名。有些排名为零。如果不是零,我想通过升序查询项目,然后查询排名等于零的剩余项目。我希望这是可以理解的

data class Item(
val id:Int,
val ranking:Int
)

您可以在ORDER BY子句中使用布尔表达式ranking > 0,该表达式对true的求值结果为1,对false的求值结果是0

SELECT *
FROM tablename 
ORDER BY ranking > 0 DESC, ranking;

查看简化的演示

一个选项是,查询两次,然后合并结果集。

@Query("SELECT ... WHERE ranking > 0 ORDER BY ranking DESC")
List<Item> getRankings();
@Query("SELECT ... WHERE ranking = 0")
List<Item> getUnranked();

也可以查询一次,但这需要毫无意义的处理,因为需要返回MAX(ranking) + 1而不是0,这样就可以进行所需的排序。在没有基准测试的情况下,不在每一行上使用域聚合应该会更快。为了加快查询的执行速度,我宁愿在字段ranking上添加一个@Index

相关内容

最新更新