บทนำ: SQLite Aggregate Function MIN()
MIN() เป็น Aggregate Function หาค่าต่ำสุดของคอลัมน์ ใช้ได้กับตัวเลข วันที่ ข้อความ
ตัวอย่าง: หาเงินเดือนต่ำสุด (MIN Salary)
ขั้นตอนที่ 1-3: โปรเจกต์, Layout, MainActivity
โครงสร้างเดียวกับตัวอย่าง SQLite ก่อนหน้า
ขั้นตอนที่ 4: DatabaseHelper.java - ใช้ MIN()
@Override
public void onCreate(SQLiteDatabase db) {
try {
// salary ใช้ TEXT แต่เก็บตัวเลขได้ (SQLite ไม่บังคับ Type)
db.execSQL("CREATE TABLE " + CONTACTS_TABLE_NAME +
"(id INTEGER PRIMARY KEY, name TEXT, salary TEXT, datetime DEFAULT CURRENT_TIMESTAMP)");
} catch (SQLiteException e) {
try { throw new IOException(e); }
catch (IOException e1) { e1.printStackTrace(); }
}
}
public ArrayList<String> getAllContacts() {
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<String> array_list = new ArrayList<>();
// MIN(salary) หาค่าต่ำสุดของคอลัมน์ salary
// หมายเหตุ: ไม่มี GROUP BY → คืนค่า 1 แถว เดียวของตารางทั้งหมด
Cursor res = db.rawQuery(
"SELECT (id || ' : ' || name || ' : ' || MIN(salary) || ' : ' || datetime) AS fullname " +
"FROM " + CONTACTS_TABLE_NAME,
null
);
res.moveToFirst();
while (!res.isAfterLast()) {
array_list.add(res.getString(res.getColumnIndex("fullname")));
res.moveToNext();
}
return array_list;
}
คำอธิบาย MIN() ใน SQLite
พฤติกรรมเมื่อไม่มี GROUP BY
- คืนค่า 1 แถวเดียว ของตารางทั้งหมด
- คอลัมน์อื่น (id, name, datetime) จะมาจากแถว "แรก" ที่ SQLite อ่านได้ (ไม่ได้รับประกัน)
- เหมาะสำหรับ: หาค่าต่ำสุดเพียงอย่างเดียว
การใช้กับ GROUP BY (แนะนำ)
-- หาเงินเดือนต่ำสุดของแต่ละคน
SELECT name, MIN(salary) FROM SalaryDetails GROUP BY name;
-- หาเงินเดือนต่ำสุดของแต่ละเดือน
SELECT strftime('%Y-%m', datetime) as month, MIN(salary)
FROM SalaryDetails GROUP BY month;
ข้อควรระวัง: Salary เก็บเป็น TEXT
ในตัวอย่าง salary เป็น TEXT → MIN() จะเปรียบเทียบแบบ String (Lexicographic)
'1000' < '200' = true(เพราะ '1' < '2') → ผิดพลาด!- แก้ไข: CAST เป็นตัวเลข
MIN(CAST(salary AS REAL))หรือเก็บเป็น INTEGER/REAL
ตาราง Aggregate Functions ใน SQLite
| Function | คำอธิบาย |
|---|---|
MIN() | ค่าต่ำสุด |
MAX() | ค่าสูงสุด |
AVG() | ค่าเฉลี่ย |
SUM() | ผลรวม |
COUNT() | นับจำนวนแถว |
ผลลัพธ์
ListView แสดง 1 แถว: ข้อมูลพร้อมเงินเดือนต่ำสุดของตารางทั้งหมด