MySQL查询统计并关联更新

做项目的时候遇到一个问题,但又不想写代码去实现,因为遵循一个原则:能用SQL语句尽量不写代码。


例子:

A表(cid)

B表(cid, cnum)


A表cid会重复,把相同的分组统计出现次数出来,再存入B表对应的cnum,B表的cid不重复。


MySQL语句:

UPDATE b
SET b.`cnum` = (SELECT c.counts
                FROM
                  (SELECT
                     cid,
                     COUNT(*) counts
                   FROM a
                   GROUP BY cid) c
                WHERE b.`cid` = c.`cid`);



实际情景:

因为项目新增了一个功能,所以要相关的数据同步,便使用MySQL语句来解决。


think_orders(order_id, price, residue) 省略N个字段......

think_take_log(order_id, take)


订单是一个红包,别人领取到对应减少剩余的金额,但之前功能上没有做,所以现在补上,相关数据要同步,需要把数据更新下再同步功能上去。


# 更新剩余金额
UPDATE `think_orders` o
SET o.`residue` = o.`price` - IFNULL((SELECT tl.`sum`
                   FROM (SELECT
                           `order_id`,
                           SUM(`take`) `sum`
                         FROM `think_take_log`
                         GROUP BY `order_id`) tl
                   WHERE o.`order_id` = tl.`order_id`), 0);

用到的MySQL函数:ISNULL(字段名, 默认值)

因为可能有的红包未被领取,即take_log中无记录,统计出来的数据为空了会出错,所以要ISNULL判断处理一下结果。

MySQL中,可以使用关联查询count()函数来统计总数。首先,你需要使用LEFT JOIN或INNER JOIN将两个表关联起来。然后,使用count()函数对需要统计的字段进行计数。下面是一个示例查询语句: SELECT COUNT(*) FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id; 其中,table1和table2是需要关联的两个表,id是它们之间的关联字段。这个查询将返回两个表关联后的总数。 如果你需要在关联查询统计某个字段的数量,可以使用以下语句: SELECT t1.field, COUNT(t2.field) FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id GROUP BY t1.field; 其中,field是需要统计的字段。这个查询将返回每个table1中的field值以及与之关联的table2中field的数量。 请注意,根据你的具体需求,你可能需要根据实际情况进行适当的修改。 #### 引用[.reference_title] - *1* *3* [MySQL关联查询 COUNT数据不准确](https://blog.youkuaiyun.com/weixin_42313773/article/details/127253892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [mysql 根据统计查询总数,修复关联查询总数](https://blog.youkuaiyun.com/Lixuanshengchao/article/details/114873956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值