聚合查询

在应用程序中,我们常常需要对数据进行统计分析,比如获取当前所有(或满足特定条件)的用户数量、所有用户的最大积分、用户的平均成绩等。具体如下:

方法说明
count统计数量,参数是要统计的字段名(可选)
max获取最大值,参数是要统计的字段名(必须)
min获取最小值,参数是要统计的字段名(必须)
avg获取平均值,参数是要统计的字段名(必须)
sum获取总分,参数是要统计的字段名(必须)

需注意,聚合方法在没有数据的情况下,默认返回值都是 0,并且聚合查询都可以与其它查询条件配合使用。

用法示例

在使用查询构造器进行统计操作时,首先要确保引入了门面类:

use think\facade\Db;
  1. 获取用户数

    // 统计用户表中的记录总数
    Db::table('think_user')->count();

    实际生成的 SQL 语句是:

    SELECT COUNT(*) AS tp_count FROM `think_user` LIMIT 1
    // 根据字段统计(例如统计 id 的数量)
    Db::table('think_user')->count('id');

    生成的 SQL 语句是:

    SELECT COUNT(id) AS tp_count FROM `think_user` LIMIT 1
  2. 获取用户的最大积分

    Db::table('think_user')->max('score');

    生成的 SQL 语句是:

    SELECT MAX(score) AS tp_max FROM `think_user` LIMIT 1

    如果要获取的最大值不是一个数值,可以使用第二个参数关闭强制转换:

    Db::table('think_user')->max('name', false);
  3. 获取积分大于 0 的用户的最小积分

    Db::table('think_user')->where('score', '>', 0)->min('score');

    max 方法一样,min 也支持第二个参数用法:

    Db::table('think_user')->where('score', '>', 0)->min('name', false);
  4. 获取用户的平均积分

    Db::table('think_user')->avg('score');

    生成的 SQL 语句是:

    SELECT AVG(score) AS tp_avg FROM `think_user` LIMIT 1
  5. 统计用户的总成绩

    Db::table('think_user')->where('id', 10)->sum('score');

    生成的 SQL 语句是:

    SELECT SUM(score) AS tp_sum FROM `think_user` LIMIT 1
  6. 使用 group 进行聚合查询
    如果要使用 group 进行聚合查询,需要自行实现查询,例如:

    Db::table('score')->field('user_id,SUM(score) AS sum_score')->group('user_id')->select();
目录
设置
主题设置
深色模式
字体设置
字体大小
16