mysql多表查询分组求和
时间: 2023-09-24 07:05:55 浏览: 54
假设有两个表,一个是订单表 order,一个是订单明细表 order_detail,它们的结构如下:
```sql
CREATE TABLE `order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '用户id',
`create_time` datetime NOT NULL COMMENT '下单时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
CREATE TABLE `order_detail` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL COMMENT '订单id',
`product_id` int(11) NOT NULL COMMENT '商品id',
`price` decimal(10,2) NOT NULL COMMENT '商品单价',
`quantity` int(11) NOT NULL COMMENT '商品数量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表';
```
现在要查询出每个用户的订单数量和订单总金额,可以使用以下 SQL 语句:
```sql
SELECT o.user_id, COUNT(DISTINCT o.id) AS order_count, SUM(od.price * od.quantity) AS total_amount
FROM `order` o
JOIN order_detail od ON o.id = od.order_id
GROUP BY o.user_id;
```
解释一下上面的 SQL 语句:
1. 使用 JOIN 将订单表和订单明细表连接起来;
2. 使用 COUNT(DISTINCT o.id) 计算每个用户的订单数量,DISTINCT 关键字可以避免重复统计同一个订单;
3. 使用 SUM(od.price * od.quantity) 计算每个用户的订单总金额;
4. 使用 GROUP BY o.user_id 对结果进行分组,以便按用户统计订单数量和订单总金额。