ThinkPHP6.x聚合查询支持count、sum、max、min、avg及多函数组合:count统计记录数,sum求和,max/min取极值,avg算平均值,field可一次性执行多个聚合并设别名。

在ThinkPHP6.x框架中执行聚合查询时,若需统计用户总数、订单总金额等数据,可通过内置的查询构造器调用聚合函数实现。以下是具体操作方式:
一、使用count统计用户总数
count方法用于对指定字段或整行进行计数,常用于获取用户表记录条数。该操作直接作用于数据库层面,避免将全部数据加载至PHP内存。
1、在控制器中引入Db类或使用模型实例。
2、调用query()或使用模型的count()方法,例如UserModel::count()。
立即学习“PHP免费学习笔记(深入)”;
3、如需带条件统计,可链式调用where(),例如UserModel::where('status', 1)->count()。
4、若需统计特定字段非NULL值数量,传入字段名参数,例如UserModel::count('id')。
二、使用sum计算订单总金额
sum函数对数值型字段执行求和运算,适用于订单表中amount字段的累计计算,返回结果为PHP浮点数或整数类型。
1、获取订单模型实例,如OrderModel。
2、调用sum()并传入金额字段名,例如OrderModel::sum('amount')。
3、添加时间范围筛选,例如OrderModel::whereBetweenTime('create_time', '2023-01-01', '2023-12-31')->sum('amount')。
4、配合group进行分组汇总,例如OrderModel::group('user_id')->sum('amount')。
三、使用max与min获取极值数据
max和min分别用于提取字段中的最大值与最小值,在分析用户最高消费额或最低订单金额时适用。
1、调用max()方法并指定数值字段,例如OrderModel::max('amount')。
2、使用min()获取最小值,例如OrderModel::min('amount')。
3、结合where限定业务场景,例如OrderModel::where('status', 'paid')->max('amount')。
4、注意:当字段全为NULL时,max/min返回NULL,需在PHP层判断空值。
四、使用avg计算平均订单金额
avg函数返回指定字段的算术平均值,适用于评估用户平均消费水平或订单单价分布。
1、调用avg()并传入金额字段,例如OrderModel::avg('amount')。
2、添加状态过滤以排除无效订单,例如OrderModel::where('status', 'completed')->avg('amount')。
3、使用number_format()对结果做格式化处理,保留两位小数。
4、注意:avg对NULL值自动忽略,但若整列无有效数值则返回NULL。
五、组合多个聚合函数一次性查询
通过field()方法传入多个聚合表达式,可在单次SQL查询中获取多项统计结果,减少数据库交互次数。
1、使用Db::table()指定表名,例如Db::table('order')。
2、在field()中写入多个聚合表达式,例如'field("COUNT(*) as total, SUM(amount) as sum_amount, AVG(amount) as avg_amount")'。
3、调用select()或find()获取结果集,返回关联数组包含各别名键。
4、必须为每个聚合字段设置别名,否则结果键名不可预测。



















