Giới thiệu
Hàm tổng hợp MIN() trả về giá trị nhỏ nhất của một cột. Demo tìm mức lương thấp nhất trong bảng.
Các bước
Bước 1 & 2: Project & Layout
Giao diện chuẩn: Tên, Lương, 4 Button, ListView.
Bước 3: MainActivity.java
Xử lý CRUD tương tự, ListView hiển thị kết quả MIN.
Bước 4: DatabaseHelper.java - Truy vấn MIN
package com.example.andy.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
class DatabaseHelper extends SQLiteOpenHelper {
static final String DB_NAME = "salaryDatabase5";
static final String TABLE = "SalaryDetails";
DatabaseHelper(Context ctx) { super(ctx, DB_NAME, null, 1); }
@Override
public void onCreate(SQLiteDatabase db) {
// Cột salary kiểu money (TEXT) nhưng so sánh như số
db.execSQL("CREATE TABLE " + TABLE +
"(id INTEGER PRIMARY KEY, name TEXT, salary TEXT, datetime DEFAULT CURRENT_TIMESTAMP)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int o, int n) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE);
onCreate(db);
}
boolean insert(String n, String s) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", n); cv.put("salary", s);
db.replace(TABLE, null, cv);
return true;
}
ArrayList getAllContacts() {
SQLiteDatabase db = getReadableDatabase();
ArrayList list = new ArrayList<>();
// Lấy bản ghi có salary nhỏ nhất (MIN)
Cursor res = db.rawQuery(
"SELECT (id || ' : ' || name || ' : ' || MIN(salary) || ' : ' || datetime) AS fullname FROM " + TABLE, null);
while (res.moveToNext()) {
list.add(res.getString(res.getColumnIndex("fullname")));
}
return list;
}
boolean update(String n, String s) {
getWritableDatabase().execSQL("UPDATE " + TABLE + " SET name='" + n + "', salary='" + s + "'");
return true;
}
boolean delete() {
getWritableDatabase().execSQL("DELETE FROM " + TABLE);
return true;
}
}
Lưu ý quan trọng
Truy vấn SELECT ..., MIN(salary) ... không có GROUP BY sẽ trả về một dòng duy nhất chứa giá trị MIN của toàn bảng. Các cột khác (id, name, datetime) sẽ lấy từ dòng đầu tiên (không xác định). Để đúng chuẩn, nên dùng subquery hoặc GROUP BY.
Kết quả

Hiển thị bản ghi có mức lương thấp nhất.