Mysql之group by GROUP_CONCAT的保证顺序

21 篇文章 0 订阅

groub by 是按照分组,默认不排序,groub后会选择默认排序的第一条进行返回。

如果分组前排序好的数据,取排序好的第一条数据排序,则需要加上limit ,进行强制排序。

		  SELECT m.* 
            from (
                SELECT
                if ( a.status = 'X002', a.fleet_name , null) AS fleet_name,a.id AS enquiryid,a.enquiry_no,b.invoice_no,a.`status`,
                a.created_dt,b.pick_time,b.arrival_time,a.created_by,a.expect_offer_time,b.send_company,b.send_province,
                b.send_city,b.send_district,b.send_address,b.send_name,b.send_phone,b.recv_company,b.recv_province,
                b.recv_city,b.recv_district,b.recv_address,b.recv_name,b.recv_phone,a.publish_mode,a.freight_calculation_type,a.dead_line,a.consig_no
                FROM
                bill_enquiry a
                LEFT JOIN bill_invoice_item b ON a.invoice_id = b.invoice_id
                where a.status in ('X001','X002')
                and a.consig_id = 6598083868299887637
                ORDER BY a.status desc
                limit 10000000000) m
            GROUP BY m.consig_no

上面的SQL会返回status排序的结果取第一条(即有X002,优先返回X002)。

但是如果查询中加入了GROUP_CONCAT(m.fleet_name) as fleet_names,则返回结果不是按照status排序的第一条数据返回。

GROUP_CONCAT(m.fleet_name order by m.fleet_name) 这个是指的concat按照指定顺序拼接。

下面是2个执行结果的截图,本应该返回X002的,加上GROUP_CONCAT后展示的为X001

最后通过Java程序进行配合处理,分2步groub排序的,跟GROUP_CONCAT的数据2个SQL执行。

SQL中去掉GROUP_CONCAT,如果是X002的则,再查询一下group中拼接的字段,遍历后Map取值后进行赋值。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值