如何使用Android中的Room在单个SQLite查询中基于列值获取记录计数?
我有一个表,它保存了我正在使用的房间数据库中的学生的记录,我尝试了一些SQl查询来获取我想要的内容,如下所述,但这不起作用 表:学生如何使用Android中的Room在单个SQLite查询中基于列值获取记录计数?,android,sql,sqlite,android-room,Android,Sql,Sqlite,Android Room,我有一个表,它保存了我正在使用的房间数据库中的学生的记录,我尝试了一些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 现在,我想获得基于分数的记录计数,因
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
sql语法
SELECT grade, COUNT(grade)
FROM your_table_name
GROUP BY grade;
sql语法
SELECT grade, COUNT(grade)
FROM your_table_name
GROUP BY grade;
@Query(“选择年级,按年级从学生组中计数(年级)作为总计数”)
列表queryGroupedGrade();
@Query(“选择年级,按年级从学生组中计数(年级)作为总计数”)
列表queryGroupedGrade();
给出另一种解决方案。如果您使用的是kotlin,则可以使用groupBy
函数。
演示代码:
给出另一个解决方案。如果您使用的是kotlin,则可以使用
groupBy
函数。
演示代码:
我认为这对其他开发人员很有用,所以我将我的最终解决方案发布到@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
)
@Query(“选择年级,按年级从学生组中计数(年级)作为总计数”)
乐趣queryGroupedGrade():列表
数据类查询结果(
变量等级:String=“”,
@ColumnInfo(name=“总数”)
var总计数:Int=0
)
我认为这对其他开发人员很有用,因此我将我的最终解决方案发布到@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
)
@Query(“选择年级,按年级从学生组中计数(年级)作为总计数”)
乐趣queryGroupedGrade():列表
数据类查询结果(
变量等级:String=“”,
@ColumnInfo(name=“总数”)
var总计数:Int=0
)
它是否高效?我不能告诉你它是否更高效,但你可以在许多地方或集合中重用数据(例如groupBy、sortBy、filter…等),并且只需要一次数据库I/O。它是否高效?我不能告诉你它是否更高效,但你可以在许多地方或集合中重用数据(例如groupBy、sortBy、filter…等)而且只需要一次数据库I/O。太棒了!这有助于构造基本查询。尽管@simon5678的答案添加了解决方案中重要的部分,以获得计数列表的结果。太好了!这有助于构造基本查询。虽然@simon5678的答案添加了解决方案中重要的部分,以获得计数列表的结果。您的答案非常接近我的解决方案,但由于@Embedded annotation打破了我房间数据库表的一些关键约束,我面临一些编译时错误。我在下面的答案中完成了解决方案,这对我来说非常完美。因此,总体而言,我的解决方案由这些答案和一些小动作组成。您的答案与我的解决方案非常接近,但由于@Embedded annotation打破了我房间数据库表的一些关键约束,我面临一些编译时错误。我在下面的答案中找到了最适合我的答案,所以总体上我的答案是这些答案和一些小技巧的混合。
fun fetchGrade() {
return dao.queryGrade().run{
this.groupBy {it.grade}
}
}
@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
)