在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,`ThinkORM`为这些统计操作提供了一系列的内置方法,包括:
| 方法 | 说明 |
| --- | --- |
| count | 统计数量,参数是要统计的字段名(可选) |
| max | 获取最大值,参数是要统计的字段名(必须) |
| min | 获取最小值,参数是要统计的字段名(必须) |
| avg | 获取平均值,参数是要统计的字段名(必须) |
| sum | 获取总分,参数是要统计的字段名(必须) |
>[danger] 聚合方法如果没有数据,默认都是0,聚合查询都可以配合其它查询条件
## 用法示例
获取用户数:
~~~
Db::table('think_user')->count();
~~~
实际生成的SQL语句是:
~~~
SELECT COUNT(*) AS think_count FROM `think_user` LIMIT 1
~~~
或者根据字段统计:
~~~
Db::table('think_user')->count('id');
~~~
生成的SQL语句是:
~~~
SELECT COUNT(id) AS think_count FROM `think_user` LIMIT 1
~~~
获取用户的最大积分:
~~~
Db::table('think_user')->max('score');
~~~
生成的SQL语句是:
~~~
SELECT MAX(score) AS think_max FROM `think_user` LIMIT 1
~~~
如果你要获取的最大值不是一个数值,可以使用第二个参数关闭强制转换
~~~
Db::table('think_user')->max('name',false);
~~~
获取积分大于0的用户的最小积分:
~~~
Db::table('think_user')->where('score', '>', 0)->min('score');
~~~
和max方法一样,min也支持第二个参数用法
~~~
Db::table('think_user')->where('score', '>', 0)->min('name',false);
~~~
获取用户的平均积分:
~~~
Db::table('think_user')->avg('score');
~~~
生成的SQL语句是:
~~~
SELECT AVG(score) AS think_avg FROM `think_user` LIMIT 1
~~~
统计用户的总成绩:
~~~
Db::table('think_user')->where('id',10)->sum('score');
~~~
生成的SQL语句是:
~~~
SELECT SUM(score) AS think_sum FROM `think_user` LIMIT 1
~~~
如果你要使用`group`进行聚合查询,需要自己实现查询,例如:
```
Db::table('score')->field('user_id,SUM(score) AS sum_score')->group('user_id')->select();
```
- 简介
- 数据库配置
- 分布式数据库
- 查询构造器
- 查询数据
- 新增数据
- 更新数据
- 删除数据
- 链式操作
- Where
- Table
- Alias
- Field
- Strict
- Limit
- Page
- Order
- Group
- Having
- Join
- Union
- Distinct
- Lock
- Cache
- Comment
- FetchSql
- Force
- Partition
- Replace
- FailException
- Extra
- Duplicate
- Sequence
- Procedure
- View
- 聚合查询
- 分页查询
- 时间查询
- 高级查询
- 子查询
- 原生查询
- 事务操作
- 存储过程
- 查询事件
- JSON字段
- 模型
- 定义
- 新增
- 更新
- 删除
- 查询
- 查询范围
- 只读字段
- JSON字段
- 自动时间写入
- 获取器
- 修改器
- 搜索器
- 类型转换
- 模型输出
- 模型事件
- 虚拟模型
- 关联
- 一对一关联
- 一对多关联
- 远程一对多
- 远程一对一
- 多对多关联
- 多态一对多
- 多态一对一
- 关联预载入
- 关联统计
- 关联输出
- SQL监听
- 缓存机制
- 字段缓存
- 查询缓存
- 扩展
- 自定义查询类
- 自定义数据库驱动