Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Android中的Room在单个SQLite查询中基于列值获取记录计数?_Android_Sql_Sqlite_Android Room - Fatal编程技术网

如何使用Android中的Room在单个SQLite查询中基于列值获取记录计数?

如何使用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 现在,我想获得基于分数的记录计数,因

我有一个表,它保存了我正在使用的房间数据库中的学生的记录,我尝试了一些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
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
函数。

演示代码:

  • 从SQLite获取数据

  • 给出另一个解决方案。如果您使用的是kotlin,则可以使用
    groupBy
    函数。

    演示代码:

  • 从SQLite获取数据

  • 我认为这对其他开发人员很有用,所以我将我的最终解决方案发布到@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
    )