本篇文章为大家展示了怎么在mysql中实现多表关联统计,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

需求:

统计每本书打赏金额,不同时间的充值数据统计,消费统计,

设计四个表,book 书本表,orders 订单表 reward_log打赏表 consume_log 消费表 ,通过book_id与book表关联,

问题:

当关联超过两张表时导致统计时数据重复,只好用子查询查出来,子查询只能查一个字段,这里用CONCAT_WS函数将多个字段其拼接

实现:

查询代码如下

SELECTb.id,b.book_name,sum(IF(o.create_time>0&&o.create_time<9999999999,o.price,0))today_pay_money,sum(IF(o.create_time>0&&o.create_time<9999999999,1,0))today_pay_num,sum(IF(o.create_time>999&&o.create_time<9999,o.price,0))yesterday_pay_money,sum(IF(o.create_time>999&&o.create_time<9999,1,0))yesterday_pay_num,sum(o.price)total_pay_money,sum(IF(o.create_time>9999&&o.create_time<99999,1,0))total_pay_num,(SELECTSUM(total_score)FROMbook_reward_logWHEREbook_id=b.id)total_score,(SELECTCONCAT_WS(',',SUM(IF(create_time>0&&create_time<998,score,0)),SUM(IF(create_time>9999&&create_time<99998,score,0)),SUM(IF(create_time>99999&&create_time<999998,score,0)))FROMbook_consume_logWHEREbook_id=b.id)scoreFROMbook_bookbLEFTJOINbook_ordersoONb.id=o.bidGROUPBYb.id

查询结果

score 为三个消费数,以逗号隔开

性能分析

上述内容就是怎么在mysql中实现多表关联统计,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。