Oha*_*has 7 mysql select group-by max
我有一个名为表order包含列id,user_id,price和item_id.商品价格不固定,我想选择每件商品最贵的订单.我想选择user_id,item_id并price在同一个查询中.我尝试了以下查询,但它没有返回正确的结果集.
SELECT user_id, item_id, MAX(price)
FROM order
GROUP BY item_id
Run Code Online (Sandbox Code Playgroud)
此查询返回的某些行有错误user_id.但是,结果集中的所有行都显示每个项目的正确最高价格.
您可能希望使用派生表,如下所示:
SELECT o1.item_id, o1.max_price, o2.user_id user_of_max_price
FROM (
SELECT item_id, MAX(price) max_price
FROM `order`
GROUP BY item_id
) o1
JOIN `order` o2 ON (o2.price = o1.max_price AND o2.item_id = o1.item_id)
GROUP BY o1.item_id;
Run Code Online (Sandbox Code Playgroud)
测试用例:
CREATE TABLE `order` (user_id int, item_id int, price decimal(5,2));
INSERT INTO `order` VALUES (1, 1, 10);
INSERT INTO `order` VALUES (1, 2, 15);
INSERT INTO `order` VALUES (1, 3, 8);
INSERT INTO `order` VALUES (2, 1, 20);
INSERT INTO `order` VALUES (2, 2, 6);
INSERT INTO `order` VALUES (2, 3, 15);
INSERT INTO `order` VALUES (3, 1, 18);
INSERT INTO `order` VALUES (3, 2, 13);
INSERT INTO `order` VALUES (3, 3, 10);
Run Code Online (Sandbox Code Playgroud)
结果:
+---------+-----------+-------------------+
| item_id | max_price | user_of_max_price |
+---------+-----------+-------------------+
| 1 | 20.00 | 2 |
| 2 | 15.00 | 1 |
| 3 | 15.00 | 2 |
+---------+-----------+-------------------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22572 次 |
| 最近记录: |