面试题答案
一键面试实现思路
- 使用
SQLiteQueryBuilder
类来构建查询。 - 关联
user
表和order
表,通过user.id = order.user_id
进行关联。 - 对订单金额进行求和操作,以获取每个用户对应的订单总金额。
- 按用户
id
进行分组,确保每个用户只出现一次并正确计算其订单总金额。
核心代码片段
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
public class DatabaseHelper {
private SQLiteDatabase db;
public DatabaseHelper(SQLiteDatabase db) {
this.db = db;
}
public Cursor getUsersWithTotalOrderAmount() {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables("user JOIN order ON user.id = order.user_id");
String[] projectionIn = {"user.id", "user.name", "user.age", "SUM(order.order_amount) AS total_amount"};
String groupBy = "user.id";
return qb.query(db, projectionIn, null, null, groupBy, null, null);
}
}
在上述代码中:
SQLiteQueryBuilder
通过setTables
方法设置要关联的表。projectionIn
定义了要查询的字段,包括用户表的id
、name
、age
以及对订单金额求和后命名为total_amount
的字段。groupBy
按用户id
进行分组,以计算每个用户的订单总金额。- 最后通过
qb.query
方法执行查询并返回Cursor
,其中包含每个用户及其对应的订单总金额。