sql使用GROUP_CONCAT实现分组过后的数据拼接去重操作

需求如下:按照ansuid字段分组,分组过后判断error_msg是否重复,重复的话error_msg就只保留一个,没有重复就进行拼接
在这里插入图片描述

//方法一:sql实现:
	select a.id,a.ansuid,a.relation_error_ansuid,GROUP_CONCAT( distinct a.error_msg) as error_msg,a.deleteflg,a.add_time,a.relation_error_pic_url
        from ( select a.id,a.ansuid,a.relation_error_ansuid,a.error_msg,a.deleteflg,a.add_time,a.relation_error_pic_url
        from t_wjdc_answer_exception a where a.deleteflg='0') a GROUP BY a.ansuid
        HAVING a.ansuid  in ('02b00813bdf74b0c9e0c','d7f5f66ff4da43098969') 
        实际开发时in后面可替换以下:
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>

获得如下效果:
在这里插入图片描述

方法二:代码实现
		//sql就不需要上面那种写法,直接就单表sql查出所有的,然后程序处理,不过这种的是通过单个id把一条重复的全部查出来,只针对单个的,也可以在前端在进行额外处理,推荐使用sql
        List<Map<String, Object>> exceptionList = questionnaireService.getExceptionByAnsuid(id);
        //拼接
        StringBuffer exceptionReason = new StringBuffer();
        int num = 0;
        for (Map<String, Object> objectMap : exceptionList) {
       		//重点就是这里的contains处理,contains:判断字符串是否包含,列如已经存在字符串abc,使用contains判断是否包含ab,如果包含返回true
            if (!exceptionReason.toString().contains(objectMap.get("error_msg").toString())) {
                num += 1;
                if (num == 1) {
                    exceptionReason.append("!小票识别异常,异常原因:").append(num+"、"+objectMap.get("error_msg"));
                } else {
                    exceptionReason.append("。").append(num+"、"+objectMap.get("error_msg"));
                }
            }
        }
        model.addAttribute("exceptionReason",exceptionReason.toString());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值