在SQLite For Android中查询列的最大值

ilc*_*edo 26 sqlite android

我创建了一个数据库,并提交了数据.有一列我想找到最大的价值.

这是我的数据库适配器中使用的方法:

public Cursor getBiggestInTheColumn() {
    return db.query(DATABASE_TABLE, null,
                    "MAX(price)", null, null, null, null);
}
Run Code Online (Sandbox Code Playgroud)

它应该工作,但当我调用方法时:

        cursor = dbadp.getBiggestInTheColumn();
Run Code Online (Sandbox Code Playgroud)

我得到像这样的运行时错误(LogCat):

07-14 12:38:51.852:ERROR/AndroidRuntime(276):引起:android.database.sqlite.SQLiteException:滥用聚合函数MAX():,同时编译:SELECT*FROM花费WHERE MAX(价格)

有任何想法吗?我怀疑这是由于查询错误,但这是我能想到的最好的.其他查询运作良好.

ste*_*las 52

如果您只想要最大的值,那么您希望SQL等效于: SELECT MAX(price) FROM spendings.

我倾向于使用db.rawQuery(String sql, String[] selectionArgs),所以它会:db.rawQuery("SELECT MAX(price) FROM spendings", null).

但我认为你可以这样做db.query(DATABASE_TABLE, new String [] {"MAX(price)"}, null, null, null, null, null);.虽然我没有测试过.

  • 经过两个小时的尝试,这条评论解决了我的问题.在使用之前将游标移动到第一条记录.人们总是忘记这一点. (7认同)
  • 当您尝试使用游标获取数据时,是否收到该异常?如果是这样,听起来你需要将Cursor定位到第一行,然后才能从中获取数据.为此,您可以调用:`mCursor.moveToFirst()`.此外,此方法调用返回一个布尔值,如果没有结果,则为false; 所以你也可以用它来防范这种情况. (6认同)

小智 9

获取列的另一种方法是将查询设置为特定列的最大值,例如:

db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price))", null, null, null, null)
Run Code Online (Sandbox Code Playgroud)

返回的游标将是数据库中的最高价格行.


小智 7

请将查询写为select max(price) as price from table name.

结果光标遵循以下语句

cursor.getString(cursor.getColumnIndex("price"));
Run Code Online (Sandbox Code Playgroud)