MySQL implements multi-table association statistics (subquery statistics) example

MySQL implements multi-table association statistics (subquery statistics) example

This article uses an example to describe how to implement multi-table association statistics in MySQL. Share with you for your reference, the details are as follows:

need:

Statistics on the reward amount for each book, recharge data statistics at different times, consumption statistics,

Design four tables, book table, orders table, reward_log table, consume_log table, and associate them with book table through book_id.

question:

When more than two tables are associated, data duplication occurs during statistics. You have to use a subquery to find it out. A subquery can only query one field. Here, the CONCAT_WS function is used to concatenate multiple fields.

accomplish:

The query code is as follows

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

Query results

score is three consumption numbers, separated by commas

Performance Analysis

Readers who are interested in more MySQL-related content can check out the following topics on this site: "MySQL query skills", "MySQL common functions summary", "MySQL log operation skills", "MySQL transaction operation skills summary", "MySQL stored procedure skills" and "MySQL database lock related skills summary"

I hope this article will be helpful to everyone's MySQL database design.

You may also be interested in:
  • Example of how to retrieve the latest data using MySQL multi-table association one-to-many query
  • A brief discussion on the implementation of multi-table unrelated query in MySQL
  • MySQL detailed explanation of multi-table association query

<<:  Let’s talk in detail about how JavaScript affects DOM tree construction

>>:  Diagram of the process of implementing direction proxy through nginx

Recommend

Implementation of CSS linear gradient concave rectangle transition effect

This article discusses the difficulties and ideas...

MySQL 5.5.27 installation graphic tutorial

1. Installation of MYSQL 1. Open the downloaded M...

Detailed explanation of how to quickly build a blog website using Docker

Table of contents 1. Preparation 2. Deployment Pr...

MySQL 5.7.18 free installation version window configuration method

This is my first blog. It’s about when I started ...

Implementation of Vue 3.x project based on Vite2.x

Creating a Vue 3.x Project npm init @vitejs/app m...

Call and execute host docker operations in docker container

First of all, this post is dedicated to Docker no...

A practical record of troubleshooting a surge in Redis connections in Docker

On Saturday, the redis server on the production s...

Linux implements the source code of the number guessing game

A simple Linux guessing game source code Game rul...

Tomcat common exceptions and solution code examples

The company project was developed in Java and the...