1. MyBatis中GROUP BY与HAVING条件组合应用解析
在数据库查询中,GROUP BY与HAVING的组合使用是进行分组后筛选的利器。不同于WHERE子句在分组前过滤数据,HAVING专门用于对分组后的结果集进行条件筛选。MyBatis作为Java生态中广泛使用的ORM框架,对这类复杂SQL查询提供了完善的支持。
实际开发中经常遇到这样的场景:需要先按某些字段分组,然后对分组后的聚合结果进行多条件筛选。比如统计各部门薪资水平时,我们可能只想查看平均工资超过1万元且最高工资低于5万元的部门。这种需求就需要在GROUP BY后使用多个HAVING条件组合。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. HAVING多条件组合的实现方式
2.1 基础XML配置写法
最直接的实现方式是在MyBatis的Mapper XML文件中编写完整SQL:
xml复制<select id="selectGroupWithHaving" resultType="map">
SELECT department_id, AVG(salary) avg_salary, MAX(salary) max_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 10000
AND MAX(salary) < 50000
</select>
这种写法的优点是直观明了,适合条件固定且数量较少的场景。但当条件动态变化时,就需要使用MyBatis的动态SQL特性。
2.2 动态SQL实现方式
MyBatis提供了强大的动态SQL功能,可以灵活构建HAVING条件:
xml复制<select id="selectDynamicHaving" resultType="map">
SELECT department_id, AVG(salary) avg_salary, COUNT(*) emp_count
FROM employees
GROUP BY department_id
<if test="minAvgSalary != null">
HAVING AVG(salary) > #{minAvgSal
