使用MySQL分组计算不同表的总和(mysql不同表分组求和)
使用MySQL分组计算不同表的总和
在实际开发中,我们常常需要对不同表中的数据进行汇总统计。MySQL作为一种广泛应用的关系型数据库,在处理数据聚合和统计方面表现良好。本文将介绍如何使用MySQL的分组查询功能,同时跨越多个表格计算总和。
1. 创建数据表
在本文中,我们将创建3个数据表,分别为“order”、“order_detl”和“product”。数据表“order”存储订单信息,包括订单编号、顾客姓名和订单日期等。数据表“order_detl”存储订单详细信息,包括订单编号、产品编号和商品数量等。数据表“product”存储产品信息,包括产品编号、产品名称和单价等。
CREATE TABLE `order` (
`order_id` int(11) NOT NULL AUTO_INCREMENT,
`customer_name` varchar(50) NOT NULL,
`order_date` date NOT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `order_detl` (
`order_id` int(11) NOT NULL,
`product_id` int(11) NOT NULL,
`quantity` int(11) NOT NULL,
PRIMARY KEY (`order_id`,`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `product` (
`product_id` int(11) NOT NULL,
`product_name` varchar(50) NOT NULL,
`unit_price` decimal(10,2) NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. 添加数据
我们使用以下代码向数据表中插入一些数据,以便后续查询。
INSERT INTO `order` (`customer_name`, `order_date`) VALUES (‘张三’, ‘2020-01-01’);
INSERT INTO `order` (`customer_name`, `order_date`) VALUES (‘李四’, ‘2020-01-02’);
INSERT INTO `order_detl` (`order_id`, `product_id`, `quantity`) VALUES (1, 1, 2);
INSERT INTO `order_detl` (`order_id`, `product_id`, `quantity`) VALUES (1, 2, 1);
INSERT INTO `order_detl` (`order_id`, `product_id`, `quantity`) VALUES (2, 1, 3);
INSERT INTO `order_detl` (`order_id`, `product_id`, `quantity`) VALUES (2, 3, 1);
INSERT INTO `product` (`product_id`, `product_name`, `unit_price`) VALUES (1, ‘商品1’, 10.00);
INSERT INTO `product` (`product_id`, `product_name`, `unit_price`) VALUES (2, ‘商品2’, 20.00);
INSERT INTO `product` (`product_id`, `product_name`, `unit_price`) VALUES (3, ‘商品3’, 30.00);
3. 查询数据
现在我们可以使用以下代码进行数据查询。查找每个订单中每种产品的销售总额,并统计订单的销售总额。
SELECT `order`.`order_id`, `order`.`customer_name`,
SUM(`order_detl`.`quantity` * `product`.`unit_price`) AS `total_amount`
FROM `order`
JOIN `order_detl` ON `order`.`order_id` = `order_detl`.`order_id`
JOIN `product` ON `order_detl`.`product_id` = `product`.`product_id`
GROUP BY `order`.`order_id`;
以上代码中,我们使用了SUM函数来计算每种产品的销售总额。同时,我们使用JOIN语句跨越多个数据表来连接数据。我们使用GROUP BY语句将数据按照订单进行分组。
4. 结果输出
查询的结果如下所示:
order_id | customer_name | total_amount
——– | ————- | ————
1 | 张三 | 40.00
2 | 李四 | 80.00
以上结果显示,订单编号为1的订单共售出商品1(单价10元)2件,商品2(单价20元)1件,共计40元;订单编号为2的订单共售出商品1(单价10元)3件,商品3(单价30元)1件,共计80元。
总结
MySQL提供了丰富的聚合函数和数据查询功能,支持跨越多个数据表进行数据连接和汇总统计。在工作中,我们可以灵活应用MySQL的分组查询功能,高效完成数据分析和统计任务。