勾股OA在线文档

group 与 having

GROUP方法通常用于结合合计函数,根据一个或多个列对结果集进行分组 。group方法只有一个参数,并且只能使用字符串。

例如,我们都查询结果按照用户id进行分组统计:

Db::name('Score')
    ->field('user_id,username,max(score)')
    ->group('user_id')
    ->select();

生成的SQL语句是:

SELECT user_id,username,max(score) FROM score GROUP BY user_id

也支持对多个字段进行分组,例如:

Db::name('Score')
    ->field('user_id,test_time,username,max(score)')
    ->group('user_id,test_time')
    ->select();

生成的SQL语句是:

SELECT user_id,test_time,username,max(score) FROM score GROUP BY user_id,test_time

HAVING方法用于配合group方法完成从分组的结果中筛选(通常是聚合条件)数据。having方法只有一个参数,并且只能使用字符串,例如:

Db::name('Score')
    ->field('username,max(score)')
    ->group('user_id')
    ->having('count(test_time)>3')
    ->select();

生成的SQL语句是:

SELECT username,max(score) FROM score GROUP BY user_id HAVING count(test_time)>3