coalesce 返回第一个非null的值

需求:计算各个门店的超时订单,若订单存在预约时间,超时已超过预约时间2小时来算;若订单没有预约时间,则以订单创建时间超过2小时来算;

        select a.name as storename,count(b.id) as ordernum
        from store a
                 left join dq_trade_order b on a.id = b.store_id
        where
            # 存在预约时间以预约时间过两小时算,否则以创建时间过两小时来算超时订单
            now() >= coalesce(b.delivery_time, b.create_time) + interval 2 hour
          and b.status in (20, 30)
          and b.create_time between #{timeArray[0]} and #{timeArray[1]}
        group by a.id;

在举例一个 union all 优化的例子:

        select areaCode, sum(price) as totalPrice
        from (
                 # 按送货地址的区域统计销售额
                 select sum(a.pay_price) / 100 as price, b.area as areaCode
                 from dq_trade_order a
                          left join send_address b on a.address_id = b.id
                 where b.area is not null
                   and a.create_time between #{timeArray[0]} and #{timeArray[1]}
                 group by b.area
                 union all
                 # 按门店所在区域统计销售额(如果没有送货地址的区域)
                 select sum(a.pay_price) / 100 as price, c.district as areacode
                 from dq_trade_order a
                          left join send_address b on a.address_id = b.id
                          left join store c on a.store_id = c.id
                 where b.area is null
                   and a.create_time between #{timeArray[0]} and #{timeArray[1]}
                 group by c.district) as combined
        group by areacode;

可以优化为:

# 1.优先按送货地址的区域统计销售额 2.如果没有送货地址的区域,就按照门店所在区域统计销售额
        select coalesce(b.area, c.district) as areaCode,
               sum(a.pay_price) / 100       as totalPrice
        from dq_trade_order a
                 left join send_address b on a.address_id = b.id
                 left join store c on a.store_id = c.id
        where a.create_time between #{timeArray[0]} and #{timeArray[1]}
        group by areaCode;

替换所有表中的所有字段,比如替换数据库中所有表数据的https://bc.gzjkjt.com/miniohttps://ba.gzjkjt.com:30080/minio

SELECT CONCAT('UPDATE ', TABLE_NAME, ' SET ', COLUMN_NAME, ' = REPLACE(', COLUMN_NAME,
              ', ''https://bc.gzjkjt.com/minio'', ''https://ba.gzjkjt.com:30080/minio'') ', ' WHERE ', COLUMN_NAME,
              ' LIKE ''%https://bc.gzjkjt.com/minio%'';')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = '数据库名称';