Mybatis查询:实现对重复数据的分组并计数

本文介绍了Mybatis中resultMap的使用,通过为查询结果设置别名,实现与实体类的对应映射。示例展示了如何配置resultMap,包括column与property的对应,以及在复杂查询中如何处理计数和分类。同时强调了GROUP BY子句中必须包含SELECT的所有非聚合列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录:Mybatis: 中返回结果集resultMap,表示的是对应关系,在这里我们可以给查询到的结果取别名,实现与Entity中的类相对应

  • column对应数据库中列名或者你自己起的别名:查询到的结果集的列名
  • property对应Entity中的类的变量名
  • 只有对应起来才能正确映射
    <resultMap id="CheckRecordVoMap" type="com.gwm.lms.asm.checkoutrecord.entity.CheckRecordVo">
        <result column="EBOARD_DATETIME" jdbcType="VARCHAR" property="dateTime"/>
        <result column="EBOARD_PRODUCTCODE" jdbcType="VARCHAR" property="productCode"/>
        <result column="EBOARD_PRODUCTNAME" jdbcType="VARCHAR" property="productName"/>
        <result column="SUMNUMBER" jdbcType="DECIMAL" property="number"/>
        <result column="WAITCHECKNUMBER" jdbcType="DECIMAL" property="waitCheckNumber"/>
        <result column="QUALIFIEDNUMBER" jdbcType="DECIMAL" property="qualifiedNumber"/>
        <result column="NOTQUALIFIEDNUMBER" jdbcType="DECIMAL" property="notQualifiedNumber"/>
    </resultMap>

    <select id="selectCheckRecordVo" resultMap="CheckRecordVoMap" parameterType="com.gwm.lms.asm.checkoutrecord.entity.EBoardEntity">
        SELECT EBOARD_DATETIME,EBOARD_PRODUCTCODE,EBOARD_PRODUCTNAME,COUNT(*) as SUMNUMBER,
        sum(case EBOARD_CHECKSTATUS when 1 then 1 else 0 end ) as WAITCHECKNUMBER,
        sum(case when EBOARD_CHECKSTATUS IN (2,3) then 1 else 0 end ) as WAITCHECKNUMBER,
        sum(case EBOARD_CHECKSTATUS when 4 then 1 else 0 end ) as NOTQUALIFIEDNUMBER
        FROM SM_AFTERSALE_EBOARD
        <where>
            <trim>
                <if test="productCode!= null and productCode!= ''">
                    and regexp_like(EBOARD_PRODUCTCODE ,#{productCode},'i')
                </if>
                <if test="productName!= null and productName!= ''">
                    and regexp_like(EBOARD_PRODUCTNAME ,#{productName},'i')
                </if>
                <if test="startTime!= null and startTime!= ''">
                    <![CDATA[ and EBOARD_DATETIME >= to_date(#{startTime},'yyyy-MM-dd HH24:mi:ss') ]]>
                </if>
                <if test="endTime!= null and endTime!= ''">
                    <![CDATA[ and EBOARD_DATETIME < to_date(#{endTime},'yyyy-MM-dd HH24:mi:ss')+1 ]]>
                </if>
            </trim>
        </where>
        GROUP BY EBOARD_DATETIME,EBOARD_PRODUCTCODE,EBOARD_PRODUCTNAME
    </select>

GROUP BY 后的条件一定要包含 SELECT 后的所有非结果集。

这里实现了对重复数据计数,并根据不同状态进行分类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值