mysql 从一个表的一个字段求和,更新到另外一个表及字符串截取、去重、切分

引子

现有一个需求:一个订单表,求这个订单表的订单数,然后根据id关联更新到另一个表中,下面说说的做法。

解决方法

首先查出都多少条订单,并去重一下

        SELECT
            client_id,
            COUNT(1) as num
        FROM
            A
        GROUP BY
            client_id

然后把两个表根据id关联起来

SELECT
    A.num,B.client_name
FROM
    (
        SELECT
            client_id,
            COUNT(1) as num
        FROM
            B
        GROUP BY
            client_id
    )AS table1
RIGHT JOIN AS table2 ON table1.client_id = table2.id
ORDER BY table1.num

最后更新表

UPDATE A a1
LEFT JOIN (
    SELECT
        client_id,
        COUNT(1) AS num
    FROM
        B
    GROUP BY
        client_id
) AS a2 ON a2.client_id = a1.id
SET a1.month_sale_size = a2.num
WHERE
    a1.id = a2.client_id

反思

在完成需求的时候遇到了一些问题,然后也百度了一下,就把这些零碎的东西也贴一下。
1.字符串截取
(1) substring(str,index)当index>0从左边开始截取直到结束 当index<0从右边开始截取直到结束 当index=0返回空
(2) substring(str,index,len) 截取str,从index开始,截取len长度
2.去重
我去重一直用的 group by(),括号里面填条件,多个条件用and隔开。
3.切分
类似于scala的split算子
用法:

SELECT SPLIT_STR(string, delimiter, position)

例子:

SELECT SPLIT_STR('a|bb|ccc|dd', '|', 3) as third;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值