mybatis组合查询最大最小值之间
时间: 2024-08-12 21:05:53 浏览: 36
MyBatis 中的组合查询涉及到获取多个关联表中的数据,并可能包括对其中某个字段的最大值和最小值的操作。这通常通过动态SQL(Dynamic SQL)来实现,尤其是在使用 `foreach` 或者 `if` 等条件语句的时候。
以下是一个基本的示例,假设我们有一个用户 (`User`) 和订单 (`Order`) 表关联,需要找出每个用户的最大订单金额和最小订单金额:
```xml
<select id="selectMinMaxAmount" parameterType="map" resultType="map">
SELECT
u.id AS userId,
MAX(o.amount) AS maxAmount,
MIN(o.amount) AS minAmount
FROM
User u
LEFT JOIN
Order o ON u.id = o.userId
WHERE
u.id = #{userId}
GROUP BY
u.id
</select>
```
在这个例子中,`#{userId}` 是传入的参数,会替换成实际的用户ID。MyBatis 会在运行时根据这个表达式生成相应的 SQL 查询。
如果你想根据某个范围查询,可以添加额外的条件到 SQL 语句中,比如查找某个用户的所有订单金额在指定区间内的最大值和最小值:
```xml
<select id="selectMinMaxAmountInRange" parameterType="map" resultType="map">
SELECT
u.id AS userId,
MAX(CASE WHEN o.amount BETWEEN #{minAmount} AND #{maxAmount} THEN o.amount ELSE NULL END) AS maxAmountInRange,
MIN(CASE WHEN o.amount BETWEEN #{minAmount} AND #{maxAmount} THEN o.amount ELSE NULL END) AS minAmountInRange
FROM
User u
LEFT JOIN
Order o ON u.id = o.userId
WHERE
u.id = #{userId}
GROUP BY
u.id
</select>
```
阅读全文