You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Room中如何按条件排序:先非零排名升序再排零值项?

Android Room 实现指定排序逻辑

要实现先按ranking升序排列非零值条目,再显示所有ranking为0的条目的需求,可通过在Room查询中使用CASE表达式控制排序优先级来实现。

核心查询实现

在你的ItemDao中编写如下查询方法:

@Dao
interface ItemDao {
    @Query("""
        SELECT * FROM Item
        ORDER BY 
            CASE WHEN ranking != 0 THEN 0 ELSE 1 END,
            ranking ASC
    """)
    suspend fun getAllItemsOrdered(): List<Item>
}

排序逻辑说明

  • CASE WHEN ranking != 0 THEN 0 ELSE 1 END:给非零ranking的条目分配优先级0,零值条目分配优先级1。优先级数值越小越靠前,因此非零条目会整体排在零值条目之前。
  • ranking ASC:在优先级相同的分组内(即非零条目组),按ranking字段升序排列。零值条目因ranking均为0,默认保持数据库中的原有顺序。

可选:对零值条目额外排序

如果需要零值条目也按特定字段(比如id)排序,可修改查询语句:

@Query("""
    SELECT * FROM Item
    ORDER BY 
        CASE WHEN ranking != 0 THEN 0 ELSE 1 END,
        ranking ASC,
        id ASC
""")
suspend fun getAllItemsOrdered(): List<Item>

内容的提问来源于stack exchange,提问作者Bekzhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:06:43