mysql一对多关系子查询_mysql实现多表关联统计(子查询统计)示例

本文实例讲述了mysql实现多表关联统计的方法。分享给大家供大家参考,具体如下:

需求:

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

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

20191010101354895.png?2019910101812

问题:

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

实现:

查询代码如下

SELECT

b.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,

( SELECT SUM( total_score ) FROM book_reward_log WHERE book_id = b.id ) total_score,

(

SELECT

CONCAT_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 ) )

)

FROM

book_consume_log

WHERE

book_id = b.id

) score

FROM

book_book b

LEFT JOIN book_orders o ON b.id = o.bid

GROUP BY

b.id

查询结果

20191010101843496.png?2019910102026

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

性能分析

20191010102041314.png?2019910102138

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。

本文标题: mysql实现多表关联统计(子查询统计)示例

本文地址: http://www.cppcns.com/shujuku/mysql/280482.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值