MySQL联表分组查询(mysql两表联查分组)

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联表分组查询是进行数据分析和汇总的一个非常有用的工具,可以帮助我们从多个表中获取所需数据,并根据需要进行计算和分组。在使用该技术时,需要根据具体情况选择合适的连接方式和分组条件,并进行统计和汇总操作。


数据运维技术 » MySQL联表分组查询(mysql两表联查分组)