在應用中我們經常會用到一些統計數據,例如當前所有(或者滿足某些條件)的用戶數、所有用戶的最大積分、用戶的平均成績等等,`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監聽
- 緩存機制
- 字段緩存
- 查詢緩存
- 擴展
- 自定義查詢類
- 自定義數據庫驅動