手册目录
前言[随时更新]
MySQL快速复习
MySQL原生查询
选择数据表
删除数据
聚合查询
时间查询
视图查询
子查询
总结/参考
也叫统计查询,通过聚合函数对表中字段值进行统计或计算;
如计数(count)、最大值(max)、最小值(min)、平均值(avg)、求和(sum)等,除count外,其它方法的参数必须是可计算的数值型字段;
| 序号 | 方法 | 说明 | 参数 |
|---|---|---|---|
| 1 | count | 统计数量 | 参数是要统计的字段名(可选) |
| 2 | max | 获取最大值 | 参数是要统计的字段名(必须) |
| 3 | min | 获取最小值 | 参数是要统计的字段名(必须) |
| 4 | avg | 获取平均值 | 参数是要统计的字段名(必须) |
| 5 | sum | 获取总分 | 参数是要统计的字段名(必须) |
这几个方法,其内部的实现机制是一样的,都用调用之前学过的value方法实现
,每个方法源码很简单,在此一并贴出:
/**
* COUNT查询
* @access public
* @param string $field 字段名
* @return integer
*/
public function count($field = '*')
{
return (int) $this->value('COUNT(' . $field . ') AS tp_count', 0);
}
/**
* SUM查询
* @access public
* @param string $field 字段名
* @return float|int
*/
public function sum($field = '*')
{
return $this->value('SUM(' . $field . ') AS tp_sum', 0) + 0;
}
/**
* MIN查询
* @access public
* @param string $field 字段名
* @return float|int
*/
public function min($field = '*')
{
return $this->value('MIN(' . $field . ') AS tp_min', 0) + 0;
}
/**
* MAX查询
* @access public
* @param string $field 字段名
* @return float|int
*/
public function max($field = '*')
{
return $this->value('MAX(' . $field . ') AS tp_max', 0) + 0;
}
/**
* AVG查询
* @access public
* @param string $field 字段名
* @return float|int
*/
public function avg($field = '*')
{
return $this->value('AVG(' . $field . ') AS tp_avg', 0) + 0;
}
源码分析:
- 聚合方法( '字段名' ) 等价于 value( ' 聚合函数( 字段名 ) ') ;
- 例如: sum( 'salary' ) <===> value( 'sum( salary ) ' ) 。
<?php
namespace app\index\controller;
//导入数据库类
use think\Db;
class Index {
public function index(){
$result = Db::table('tp5_staff') //设置数据表
-> where(['salary'=>['>',8000]]) //设置查询条件
-> count(); //统计满足条件的记录数量
//查看结果
dump($result);
}
}
int( 6 ) //表示满足条件的有6条记录
Db::table('tp5_staff') -> where(['salary'=>['>',8000]]) -> value( 'count( '*' )' );
SELECT COUNT(*) AS tp_count FROM `tp5_staff` WHERE `salary` > 8000 LIMIT 1;
<?php
namespace app\index\controller;
//导入数据库类
use think\Db;
class Index {
public function index(){
$result = Db::table('tp5_staff') //设置数据表
-> where(['dept'=>['=','开发部']]) //设置查询条件
-> avg('salary'); //查询部门平均工资
//查看结果
dump(round($result,2));
}
}
float(6456.43) // 开发部员工的平均工资
SELECT AVG(salary) AS tp_avg FROM `tp5_staff` WHERE `dept` = '开发部' LIMIT 1
Db::table('tp5_staff') -> where('dept','开发部') -> value( 'avg( salary )' );
单独的统计查询其实并不常用,分组查询中其实也用到了聚合函数。聚合查询比较适合用在子查询中,后面还会有实例讲解。
科技资讯
精品课程
共5课时 | 18万人学习
共49课时 | 82.1万人学习
共29课时 | 65万人学习
共25课时 | 41.3万人学习
共43课时 | 76.7万人学习