MySQL联表分组查询
MySQL是一个开源的关系型数据库管理系统,它的使用广泛而且非常受欢迎。在数据库查询中使用联表分组查询可以将多个表连接起来,根据一个或多个条件将数据分为多组,然后对每组数据进行汇总和统计分析。下面我们来学习如何进行MySQL联表分组查询。
我们需要创建几个表,假设我们有以下几张表:order、customer和product,它们之间的关系如下图所示:
![MySQL关系图](https://s3.ax1x.com/2021/02/02/yOckFU.png)
其中,order表中记录了顾客的订单信息,包括订单号、顾客ID以及产品ID等信息;customer表中记录了顾客的基本信息,包括顾客ID、顾客姓名、顾客邮箱等信息;product表中记录了产品的基本信息,包括产品ID、产品名称、产品价格等信息。
我们可以通过下面的SQL语句来创建这几个表:
“`sql
CREATE TABLE order (
order_id INT PRIMARY KEY,
customer_id INT,
product_id INT,
order_date DATE,
order_total DECIMAL
);
CREATE TABLE customer (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50),
customer_eml VARCHAR(50)
);
CREATE TABLE product (
product_id INT PRIMARY KEY,
product_name VARCHAR(50),
product_price DECIMAL
);
接下来,我们可以向这些表中插入一些数据:
```sql
INSERT INTO order VALUES (1, 1, 1, '2021-01-01', 100.00);
INSERT INTO order VALUES (2, 2, 2, '2021-01-02', 200.00);
INSERT INTO order VALUES (3, 1, 3, '2021-01-03', 300.00);
INSERT INTO order VALUES (4, 3, 2, '2021-01-04', 150.00);
INSERT INTO customer VALUES (1, 'John Smith', 'john@example.com');
INSERT INTO customer VALUES (2, 'Jane Doe', 'jane@example.com');
INSERT INTO customer VALUES (3, 'Bob Johnson', 'bob@example.com');
INSERT INTO product VALUES (1, 'iPhone', 800.00);
INSERT INTO product VALUES (2, 'iPad', 600.00);
INSERT INTO product VALUES (3, 'MacBook Pro', 1500.00);
现在,我们可以开始进行MySQL联表分组查询了。假设我们要统计每个顾客的订单总金额,并按照降序排列,我们可以使用下面的SQL语句:
“`sql
SELECT c.customer_name, SUM(o.order_total) AS total
FROM customer c JOIN order o ON c.customer_id = o.customer_id
GROUP BY c.customer_name
ORDER BY total DESC;
这个查询语句中,我们使用了JOIN关键字将customer表和order表连接起来,然后根据customer_name分组,使用SUM函数计算每个分组下的订单总金额,最后按照total降序排列。
输出结果如下所示:
+————-+———+
| customer_name | total |
+————-+———+
| John Smith | 400.00 |
| Jane Doe | 200.00 |
| Bob Johnson | 150.00 |
+————-+———+
从输出结果中可以看出,John Smith的订单总金额最大,为400.00。
除了上述例子,我们还可以使用联表分组查询来进行更复杂的数据分析和汇总。例如,我们可以统计每个产品的销售数量和销售总额,并按照销售数量降序排列,代码如下:
```sql
SELECT p.product_name, COUNT(o.product_id) AS cnt, SUM(o.order_total) AS total
FROM product p LEFT JOIN order o ON p.product_id = o.product_id
GROUP BY p.product_name
ORDER BY cnt DESC;
输出结果如下所示:
+---------------+-------+---------+
| product_name | cnt | total |
+---------------+-------+---------+
| iPad | 2 | 350.00 |
| iPhone | 1 | 100.00 |
| MacBook Pro | 1 | 300.00 |
+---------------+-------+---------+
从输出结果中可以看出,iPad销售数量最多,为2个,销售总额为350.00。
总结:
MySQL联表分组查询是进行数据分析和汇总的一个非常有用的工具,可以帮助我们从多个表中获取所需数据,并根据需要进行计算和分组。在使用该技术时,需要根据具体情况选择合适的连接方式和分组条件,并进行统计和汇总操作。