如何在android中使用room在单个sqlite查询中获得基于列值的记录计数?

cfh9epnr  于 2021-07-24  发布在  Java
关注(0)|答案(4)|浏览(396)

我有一个表,它保存了我正在使用的房间数据库中的学生的记录,我尝试了一些sql查询来获取我想要的内容,如下所述,但这不起作用。
表:学生

id  name    grade      age
1   John     Good       10
2   Jan    Average      11
3   Bob      Good        9
4   Peter    Low        11
5   Jack   Average      10

现在,我想获得基于成绩的记录计数,因此对于上面的记录,查询将返回基于成绩的计数,如下所示

Good - 2
Average - 2
Low - 1
7uzetpgm

7uzetpgm1#

sql语法,

SELECT grade, COUNT(grade)
FROM your_table_name
GROUP BY grade;
qltillow

qltillow2#

class QueryResult{
    String grade;
    @Embedded
    int total_count;

}
@Query("SELECT grade, COUNT(grade) as total_count FROM Students GROUP BY grade")
List<QueryResult> queryGroupedGrade();
oogrdqng

oogrdqng3#

给出另一个解决方案。如果您使用的是kotlin,那么您可以使用 groupBy 功能。https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html
演示代码:
从sqlite获取数据

@Query("SELECT * FROM Students")
abstract fun queryGrade(): List<QueryResult>

提取数据并按等级分组

fun fetchGrade() {
    return dao.queryGrade().run{
        this.groupBy {it.grade}
    }
}
vsaztqbk

vsaztqbk4#

我认为这对其他开发人员很有用,所以我将我的最终解决方案发布到@simon5678上,这是我在评论中提到的上述答案的组合

@Query("SELECT grade, COUNT(grade) as total_count FROM Students GROUP BY grade")
fun queryGroupedGrade(): List<QueryResult>

data class QueryResult(

    var grade: String = "",

    @ColumnInfo(name = "total_count")
    var total_count: Int = 0
)

相关问题