查询SQLite For Android中列的最大值

我有一个数据库创build并提交数据。 有一列我想find最大的价值。

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

public Cursor getBiggestInTheColumn() { return db.query(DATABASE_TABLE, null, "MAX(price)", null, null, null, null); } 

它应该工作,但是当我打电话的方法:

  cursor = dbadp.getBiggestInTheColumn(); 

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

07-14 12:38:51.852:错误/ AndroidRuntime(276):导致:android.database.sqlite.SQLiteException:滥用聚合函数MAX():,而编译:SELECT * FROM spendings WHERE MAX(price)

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

Solutions Collecting From Web of "查询SQLite For Android中列的最大值"

如果你只是想要最大的价值,那么你想要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);来做到这一点db.query(DATABASE_TABLE, new String [] {"MAX(price)"}, null, null, null, null, null); 。 虽然我没有testing过。

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

 db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price))", null, null, null, null) 

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

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

结果光标按照下面的语句

 cursor.getString(cursor.getColumnIndex("price")); 
  public Cursor select(String sql) { try { Cursor cursor = mDataBase.rawQuery(sql,null); return cursor; } catch (SQLException mSQLException) { throw mSQLException; } } and 

这样称呼:

  Cursor cursor = dal.select("SELECT Max(id) FROM terms"); //where en like '"+name+"%'"); if (cursor != null) { cursor.moveToFirst(); int id= cursor.getInt(0);} 

我在Android中有同样的问题。 和`db.rawQuery(String sql,String [] selectionArgs),所以它会是:db.rawQuery(“SELECT MAX(price)FROM spendings”,null) – 抛出exception

我修复了:

 db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price) FROM + DATABASE_TABLE + ")", null, null, null, null) 

返回的游标将是数据库中最高的价格行。 它工作正确。

如果你想获得TABLE中列的最大值,你可以使用这个方法

  public String getMax( String TABLE_NAME, String column_name) {// use the data type of the column database.open(); Cursor cursor = database.query(TABLE_NAME, new String[]{"MAX(" +column_name + ") AS MAX"}, null, null, null, null, null); cursor.moveToFirst(); // to move the cursor to first record int index = cursor.getColumnIndex("MAX"); String data = cursor.getString(index);// use the data type of the column or use String itself you can parse it database.close(); return data; } 

如果您想获取包含列的最大值的整个logging

  public List<Object> getMaxRecord(String TABLE_NAME, String column_name) { database.open(); Cursor cursor = database.query(TABLE_NAME, new String[]{"*"}, column_name + " = " + "(SELECT MAX(" + column_name + ") FROM " + TABLE_NAME + ")", null, null, null, null); List<Object> demos = cursorToModel(cursor); database.close(); return demos; } 

注意:cursorToModel是一个方法来获取光标中的logging列表,使其满足约束条件