手册目录
前言[随时更新]
MySQL快速复习
MySQL原生查询
选择数据表
删除数据
聚合查询
时间查询
视图查询
子查询
总结/参考
提到分组,就必须提统计,如对统计函数陌生的同学,请复习前面课程
/**
* 指定group查询
* @access public
* @param string $group GROUP
* @return $this
*/
public function group($group)
{
$this->options['group'] = $group;
return $this;
}
该方法源码很简单,就是给查询对象Query中的查询选项属性option[ ]赋值,并返回查询对象自身,便于后台的链式操作。
| 序号 | 参数 | 说明 |
|---|---|---|
| 1 | 分组字段名 | 分组字段名必须有意义,如地区、部门,性别等,可以容纳同类数据,而工资,生日不适合于分组 |
group方法参数必须是字符串,不能是数组等其它类型,切记
我们将tp5_staff表中的部门字段,由部门编号修改成中文名称,以便于演示
#修改表中字段dept的类型与约束条件
ALTER TABLE `tp5_staff` CHANGE dept dept VARCHAR(20) NOT NULL DEFAULT '开发部' COMMENT '部门';
#批量更新dept字段的值
UPDATE `tp5_staff` SET dept = '客服部' WHERE dept = 0;
UPDATE `tp5_staff` SET dept = '开发部' WHERE dept = 1;
UPDATE `tp5_staff` SET dept = '市场部' WHERE dept = 2;

任务1:查询tp5_staff表中,各部门的平均工资
Index.php 控制器中代码如下:
<?php
namespace app\index\controller;
//导入数据库类
use think\Db;
class Index {
public function index(){
//查询部门的平均工资,小数保留2位
$result = Db::table('tp5_staff')
//字段名称中,可以使用聚合统计函数
-> field(['dept'=>'部门','ROUND(AVG(salary),2)'=>'平均工资'])
-> group('dept')->select();
//查看结果
dump($result);
}
array(3) {
[0] => array(2) {
["部门"] => string(9) "客服部"
["平均工资"] => float(6044.25)
}
[1] => array(2) {
["部门"] => string(9) "市场部"
["平均工资"] => float(9431.33)
}
[2] => array(2) {
["部门"] => string(9) "开发部"
["平均工资"] => float(6456.43)
}
}

SELECT `dept` AS `部门`,ROUND(AVG(salary),2) AS `平均工资` FROM `tp5_staff` GROUP BY dept
代码分析:
group方法也支持多字段分组,其原理也单段分组是一样的,就是分组的嵌套,因平时极少用到,感兴趣的同学,可以自己试一下,此处不再演示啦~~
科技资讯
精品课程
共5课时 | 18万人学习
共49课时 | 82.1万人学习
共29课时 | 65万人学习
共25课时 | 41.3万人学习
共43课时 | 76.7万人学习