php聚合查询,聚合查询 - ThinkPHP5数据库实例详解 - php中文网手册

聚合查询也叫统计查询,通过聚合函数对表中字段值进行统计或计算;

1、聚合函数:仅返回单值的函数如计数(count)、最大值(max)、最小值(min)、平均值(avg)、求和(sum)等,除count外,其它方法的参数必须是可计算的数值型字段;序号方法说明参数1count统计数量参数是要统计的字段名(可选)

2max获取最大值参数是要统计的字段名(必须)

3min获取最小值参数是要统计的字段名(必须)

4avg获取平均值参数是要统计的字段名(必须)

5sum获取总分参数是要统计的字段名(必须)

2、 源码分析:这几个方法,其内部的实现机制是一样的,都用调用之前学过的value方法实现

,每个方法源码很简单,在此一并贴出:

1. count方法源码:/**

* COUNT查询

* @access public

* @param string $field 字段名

* @return integer

*/

public function count($field = '*')

{

return (int) $this->value('COUNT(' . $field . ') AS tp_count', 0);

}

2. sum方法源码:/**

* SUM查询

* @access public

* @param string $field 字段名

* @return float|int

*/

public function sum($field = '*')

{

return $this->value('SUM(' . $field . ') AS tp_sum', 0) + 0;

}

3. min方法源码:/**

* MIN查询

* @access public

* @param string $field 字段名

* @return float|int

*/

public function min($field = '*')

{

return $this->value('MIN(' . $field . ') AS tp_min', 0) + 0;

}

4. max方法源码:/**

* MAX查询

* @access public

* @param string $field 字段名

* @return float|int

*/

public function max($field = '*')

{

return $this->value('MAX(' . $field . ') AS tp_max', 0) + 0;

}

5. avg方法源码:/**

* 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 ) ' )  。

3、实例演示

任务1 :统计tp5_staff表中工资大于8000的员工人数Index.php 控制器代码:<?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条记录count方法默认参数为'*',所以此处可以省略;

其中的的count方法可以用value方法替代Db::table('tp5_staff')  -> where(['salary'=>['>',8000]]) -> value( 'count( '*' )' );对应的SQL语句:SELECT COUNT(*) AS tp_count FROM `tp5_staff` WHERE `salary` > 8000 LIMIT 1;

任务2 :统计tp5_staff表中开发部平均工资(结果取2位小数)<?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)    // 开发部员工的平均工资对应的SQLSELECT AVG(salary) AS tp_avg FROM `tp5_staff` WHERE `dept` = '开发部' LIMIT 1同理,也可以用value方法进行改写:Db::table('tp5_staff')  -> where('dept','开发部') -> value( 'avg( salary )' );max方法,min方法,sum方法使用方式与前面二例完全相同,此处不再举例。

4、总结单独的统计查询其实并不常用,分组查询中其实也用到了聚合函数。聚合查询比较适合用在子查询中,后面还会有实例讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值