Yii2中可用模型内置聚合方法快速获取数据库字段的最值或平均值:max()返回最大值(空时为null)、min()返回最小值(字符串按字典序)、avg()返回平均值(自动忽略NULL,要求数值类型)。

在Yii2项目中快速获取数据库某字段的最大值、最小值或平均值,避免手写原生SQL或遍历结果集,直接用模型查询内置聚合方法就能一步到位。
用max()查最大值
方法一:直接调用静态方法,传入字段名User::find()->max('age')
方法二:配合where条件筛选后取最大值User::find()->where(['status' => 1])->max('salary')
注意:如果查询结果为空(如全表无记录或where无匹配),【max()返回null而非0】,后续做数值比较前必须判空,否则可能触发PHP警告。
用min()查最小值
第一步:构造查询对象→指定目标字段→执行min()$minId = Article::find()->select('id')->min();
第二步:若需带条件,把where放在select之前或之后均可,但推荐前置以提升可读性Article::find()->where(['published' => true])->min('created_at')
第三步:字符串字段也能用min(),此时按字典序比较,比如查最早注册的用户名:User::find()->min('username')——这会返回字母顺序最靠前的用户名,不是长度最短的。
用avg()算平均值
方法一:基础用法,返回float类型结果Order::find()->avg('amount')
方法二:限定范围再平均,例如只算已完成订单的客单价Order::find()->where(['status' => 'completed'])->avg('amount')
avg()自动跳过NULL值,但要求字段本身是数值类型。如果传入字符串字段(如avg('name')),MySQL会尝试隐式转换,可能返回0或报错,【务必确认字段类型为INT/FLOAT/DECIMAL】。


















