我创建了一个数据库,并提交了数据。有一栏我想找到最大的价值。
这是我的数据库适配器中使用的方法:
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:ERROR / AndroidRuntime(276):引起:android.database.sqlite.SQLiteException:滥用聚合函数MAX():,同时编译:SELECT * FROM花费WHERE MAX(价格) )
有什么想法吗?我怀疑这是由于查询错误,但这是我能想到的最好的。其他查询效果很好。
答案 0 :(得分: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);
做到这一点。虽然我没有测试过。
答案 1 :(得分:9)
获取列的另一种方法是将查询设置为特定列的最大值,例如:
db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price))", null, null, null, null)
返回的游标将是数据库中的最高价格行。
答案 2 :(得分:7)
请将查询写为select max(price) as price from table name
。
结果光标遵循以下声明
cursor.getString(cursor.getColumnIndex("price"));
答案 3 :(得分:3)
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);}
答案 4 :(得分:0)
我在Android中遇到同样的问题。 和`db.rawQuery(String sql,String [] selectionArgs),所以它将是:db.rawQuery(“SELECT MAX(price)FROM spendings”,null) - 抛出异常。
我修复:
db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price) FROM + DATABASE_TABLE + ")", null, null, null, null)
返回的游标将是数据库中的最高价格行。它的工作正确。
答案 5 :(得分:0)
如果要获取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;
}
如果您想获得包含列
的最大值的整个记录 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是一种获取光标中记录约束的记录列表的方法
答案 6 :(得分:0)
如果您只想要最大的INTEGER
值,则可以使用以下内容:
public int getBiggestInTheColumn() {
return (int) DatabaseUtils.longForQuery(db, "SELECT MAX(price) FROM " + DATABASE_TABLE, null);
}
DatabaseUtils
已添加到Android API 1
public static long longForQuery(SQLiteDatabase db, 字符串查询 String [] selectionArgs)
实用程序方法,用于在数据库上运行查询并在第一行的第一列中返回值。