MySQL 如何在一个MySQL查询中使用GROUP BY、HAVING和ORDER BY显示和特定范围之间的总和记录?

MySQL 如何在一个MySQL查询中使用GROUP BY、HAVING和ORDER BY显示和特定范围之间的总和记录?

在MySQL中,使用GROUP BY、HAVING和ORDER BY可以对查询结果进行分组、筛选和排序。有时我们需要在一个查询中同时使用这三个操作,例如在一个商品销售数据表中,查询每个销售员销售额在1000到5000之间的商品销售记录,并按销售员和销售额进行升序排序。本文将介绍如何在MySQL中使用GROUP BY、HAVING和ORDER BY实现这个目标。

阅读更多:MySQL 教程

数据准备

我们假设有一个商品销售数据表sales,其中包含以下字段:销售ID(sale_id,主键)、销售员ID(salesperson_id)、销售金额(amount)。我们先创建并插入一些测试数据:

CREATE TABLE sales (
  sale_id INT AUTO_INCREMENT PRIMARY KEY,
  salesperson_id INT,
  amount DECIMAL(8,2)
);

INSERT INTO sales (salesperson_id, amount) VALUES 
(1, 1000.00), (1, 2000.00), (2, 3000.00), (3, 4000.00), (4, 5000.00),
(3, 6000.00), (4, 7000.00), (4, 8000.00), (5, 9000.00), (5, 10000.00);

查询分析

我们需要查询每个销售员销售额在1000到5000之间的商品销售记录,并按销售员和销售额进行升序排序。

首先,我们需要对销售记录进行分组,以便统计每个销售员的销售额。GROUP BY语句可以实现这个功能,我们选择以salesperson_id为分组字段:

SELECT salesperson_id, SUM(amount) AS total_amount 
FROM sales 
GROUP BY salesperson_id;

执行以上语句,我们可以得到以下结果:

salesperson_id total_amount
1 3000.00
2 3000.00
3 10000.00
4 20000.00
5 19000.00

接下来,我们需要筛选出销售额在1000到5000之间的记录。由于HAVING语句可以对分组后的结果进行筛选,我们可以在GROUP BY语句之后添加HAVING语句来实现:

SELECT salesperson_id, SUM(amount) AS total_amount 
FROM sales 
GROUP BY salesperson_id 
HAVING total_amount BETWEEN 1000 AND 5000;

执行以上语句,我们可以得到以下结果:

salesperson_id total_amount
1 3000.00
2 3000.00

最后,我们需要按销售员和销售额进行升序排序。ORDER BY语句可以实现这个功能,我们选择按salesperson_id和total_amount字段升序排序:

SELECT salesperson_id, SUM(amount) AS total_amount 
FROM sales 
GROUP BY salesperson_id 
HAVING total_amount BETWEEN 1000 AND 5000 
ORDER BY salesperson_id, total_amount ASC;

执行以上语句,我们可以得到以下结果:

salesperson_id total_amount
1 3000.00
2 3000.00

结论

在MySQL中,使用GROUP BY、HAVING和ORDER BY可以对查询结果进行分组、筛选和排序。在查询时,可以先使用GROUP BY语句对数据进行分组,然后再使用HAVING语句对分组后的结果进行筛选,最后使用ORDER BY语句对结果进行排序。通过以上示例,我们可以清晰地了解这三个关键字的使用方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程