mysql 在重复数据中group by后 取最小值的所在的记录的其他值
时间: 2024-01-21 16:16:33 浏览: 64
解析mysql中:单表distinct、多表group by查询去除重复记录
5星 · 资源好评率100%
可以使用子查询和INNER JOIN来实现。
例如,假设我们有一个名为`orders`的表,其中包含订单号、客户ID和订单金额:
```
+----+---------+-------+
| id | user_id | total |
+----+---------+-------+
| 1 | 100 | 50 |
| 2 | 100 | 70 |
| 3 | 200 | 30 |
| 4 | 200 | 40 |
+----+---------+-------+
```
现在我们想要按用户ID分组,并找到每个用户的最小订单金额及其对应的订单号。可以使用以下查询:
```
SELECT o.id, o.user_id, o.total
FROM orders o
INNER JOIN (
SELECT user_id, MIN(total) AS min_total
FROM orders
GROUP BY user_id
) o2 ON o.user_id = o2.user_id AND o.total = o2.min_total;
```
查询结果如下:
```
+----+---------+-------+
| id | user_id | total |
+----+---------+-------+
| 1 | 100 | 50 |
| 3 | 200 | 30 |
+----+---------+-------+
```
解释一下这个查询语句:
1. 首先,我们使用子查询来找到每个用户的最小订单金额,同时将其命名为`min_total`。
2. 然后,我们在`orders`表和子查询之间使用`INNER JOIN`来匹配每个用户的最小订单金额及其对应的订单号。
3. 最后,我们选择订单号、用户ID和订单金额作为结果。注意,这里选择的是`o.id`而不是`o2.id`,因为我们想要的是包含最小金额的订单的完整信息。
希望对你有所帮助!
阅读全文