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

 更新时间:2019年10月10日 10:20:31   作者:flysnownet  
这篇文章主要介绍了mysql实现多表关联统计(子查询统计),结合具体案例形式分析了mysql多表关联统计的原理、实现方法及相关操作注意事项,需要的朋友可以参考下

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

需求:

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

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

问题:

当关联超过两张表时导致统计时数据重复,只好用子查询查出来,子查询只能查一个字段,这里用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

查询结果

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

性能分析

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

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

相关文章

  • MySQL数据表使用的SQL语句整理

    MySQL数据表使用的SQL语句整理

    这篇文章主要介绍了MySQL数据表使用的SQL语句整理,文章基于MySQL的相关资料展开举例说明,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • MySQL 安装与使用步骤详解

    MySQL 安装与使用步骤详解

    本文给大家介绍MySQL 安装与使用步骤详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-06-06
  • 深入理解mysql各种锁

    深入理解mysql各种锁

    大家好,本篇文章主要讲的是深入理解mysql各种锁,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 浅谈MySQL中字符串匹配的N种姿势

    浅谈MySQL中字符串匹配的N种姿势

    在数据库查询中,字符串匹配是使用频率最高的操作之一,本文将深入解析MySQL中8种字符串匹配技术的原理与应用场景,感兴趣的小伙伴可以了解下
    2025-07-07
  • mysqlbinlog查看日志[ERROR]unknown variable ‘default-character-set=utf8’

    mysqlbinlog查看日志[ERROR]unknown variable ‘default-ch

    使用mysqlbinlog工具处理MySQL的二进制日志文件时,出现[ERROR]unknown variable ‘default-character-set=utf8’,本文将详细介绍出现ERROR的原因和如何解决这一问题
    2025-03-03
  • Mysql之索引的数据结构详解

    Mysql之索引的数据结构详解

    索引是存储引擎用于快速找到数据记录的一种数据结构,类似于教科书的目录部分,在MySQL中,索引可以加速数据查找,减少磁盘I/O的次数,提高查询速率,但是,创建和维护索引需要耗费时间,并且索引需要占磁盘空间,在InnoDB中,索引的实现基于B+树结构
    2024-12-12
  • mysql字符集相关总结

    mysql字符集相关总结

    这篇文章主要介绍了Python 中删除文件的几种方法汇总,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • MySQL修改表结构操作命令总结

    MySQL修改表结构操作命令总结

    这篇文章主要介绍了MySQL修改表结构操作命令总结,包含如删除列、添加列、修改列、添加主键、删除主键、添加唯一索引、添加普通索引等内容,需要的朋友可以参考下
    2014-12-12
  • Mysql表连接的误区与原理详析

    Mysql表连接的误区与原理详析

    在使用MySQL数据库过程中,left join 基本是必用的语法,下面这篇文章主要给大家介绍了关于Mysql表连接的误区与原理的相关资料,需要的朋友可以参考下
    2022-09-09
  • MySQ索引操作命令总结(创建、重建、查询和删除索引命令详解)

    MySQ索引操作命令总结(创建、重建、查询和删除索引命令详解)

    本篇文章主要是对MySQL索引操作方法做了一下总结,包括创建索引、重建索引、查询索引、删除索引的操作
    2014-04-04

最新评论