Skip to content

MyBatis-Plus 在 QueryWrapper 中使用 SUM 聚合函数

🏷️ MyBatis

为了避免使用字符串的字段名,一般都是使用 LambdaQueryWrapper 查询,但是 groupBy 后想在 select 中指定聚合函数时,没有发现对应的方法。

参考这篇博客中的写法,可以通过 QueryWrapperselect 方法指定查询结果的列,由于是字符串类型的参数,可以在其中使用聚合函数。

下面是一个 SUM 的示例,由于 SUM 的结果可能为 null ,最好是添加一个 IFNULL 判断将结果转换一下。

java
QueryWrapper<Entity> queryWrapper = Wrappers.query();

queryWrapper.ge("day", startDate);
queryWrapper.le("day", endDate);

if (StringUtils.isNoneBlank(appId)) {
    queryWrapper.eq("app_id", appId);
}

queryWrapper.groupBy("day");
queryWrapper.select(
        "day",
        "IFNULL(SUM(uv),0) uv",
        "IFNULL(SUM(uv_receive),0) uv_receive",
        "IFNULL(SUM(uv_video),0) uv_video"
);

return summaryService.list(queryWrapper);