Подтвердить что ты не робот

Запрос максимального значения столбца в SQLite для Android

У меня есть база данных, созданная и зарегистрированная с данными. Есть столбец, где я хочу найти самое большое значение.

Это метод, используемый в моем адаптере базы данных:

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

Он должен работать, но когда я вызываю метод:

        cursor = dbadp.getBiggestInTheColumn();

Я получаю Runtime Error Like This (LogCat):

07-14 12: 38: 51.852: ERROR/AndroidRuntime (276): вызвано: android.database.sqlite.SQLiteException: неправильное использование агрегатной функции MAX():, при компиляции: SELECT * FROM расходов WHERE MAX (цена )

Любые идеи? Я подозреваю, что это связано с плохим запросом, но это лучшее, что я могу придумать. Другие запросы работают хорошо.

4b9b3361

Ответ 1

Если вам просто нужно самое большое значение, вам нужен эквивалент 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);. Хотя я не тестировал это.

Ответ 2

Другой способ получить столбец может состоять в том, чтобы задать запрос для максимального числа определенного столбца, например:

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

Возвращаемый курсор будет самой высокой ценой в базе данных.

Ответ 3

пожалуйста, напишите запрос как select max(price) as price from table name.

приведенный курсор следует за приведенным ниже выражением

cursor.getString(cursor.getColumnIndex("price"));

Ответ 4

 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);}

Ответ 5

У меня такая же проблема в Android. И `db.rawQuery(String sql, String [] selectionArgs), поэтому это будет: db.rawQuery( "SELECT MAX (цена) FROM расходов", null) - throw Исключение.

I фиксировано:

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

Возвращаемый курсор будет самой высокой ценой в базе данных. Он работает правильно.

Ответ 6

Если вы хотите получить максимальное значение столбца в 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;
    }

note: cursorToModel - это метод для получения списка записей в курсоре, удовлетворяющем ограничению